1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
// SPDX-License-Identifier: GPL-2.0+
/*
* device tree overlay for the mhs-3.5 ads7846 resistive touch controller.
*
* fits in with `./mhs35-overlay.dts`!
*
* Copyright (c) 2026 Mel G. <mel@rnrd.eu>
*/
/dts-v1/;
/plugin/;
/ {
compatible = "brcm,bcm2711";
fragment@0 {
target = <&spi0>;
__overlay__ {
status = "okay";
spidev@1 {
status = "disabled";
};
};
};
fragment@1 {
target = <&gpio>;
__overlay__ {
mhs35_touch_pins: mhs35_touch_pins@0 {
brcm,pins = <17>; // pen-irq
brcm,function = <0>; // in
brcm,pull = <2>; // up
};
};
};
fragment@2 {
target = <&spi0>;
__overlay__ {
#address-cells = <1>;
#size-cells = <0>;
mhs35_touch: ads7846@1 {
compatible = "ti,ads7846";
reg = <1>;
pinctrl-names = "default";
pinctrl-0 = <&mhs35_touch_pins>;
// adc should run at 2mhz as specced, anything
// slower makes reading drift and drag weirdly!
spi-max-frequency = <2000000>;
interrupts = <17 2>; // falling edge
interrupt-parent = <&gpio>;
pendown-gpio = <&gpio 17 1>; // pen-irq, check pins!
// these values try to supress garbage data on press,
// without these, clicks are weird and unreliable!
ti,keep-vref-on;
ti,settle-delay-usec = /bits/ 16 <150>;
ti,debounce-max = /bits/ 16 <10>;
ti,debounce-tol = /bits/ 16 <30>;
ti,debounce-rep = /bits/ 16 <1>;
// NOTE(mel): these values do *not* calibrate the screenspace
// coordination in accordance with the rotation by themselves!
// the exact matrices are set via libinput in userspace.
// see: `module.nix`
ti,x-min = /bits/ 16 <200>;
ti,y-min = /bits/ 16 <200>;
ti,x-max = /bits/ 16 <3900>;
ti,y-max = /bits/ 16 <3900>;
// some basic pressure values provided by goodtft,
// could be tuned maybe.
ti,pressure-min = /bits/ 16 <0>;
ti,pressure-max = /bits/ 16 <255>;
ti,x-plate-ohms = /bits/ 16 <150>;
};
};
};
__overrides__ {
touch_speed = <&mhs35_touch>,"spi-max-frequency:0";
touch_penirq = <&mhs35_touch_pins>,"brcm,pins:0",
<&mhs35_touch>,"interrupts:0",
<&mhs35_touch>,"pendown-gpio:4";
};
};
|