From 398608948fa730883d234a636cb33f73f2da51cf Mon Sep 17 00:00:00 2001 From: Mel Date: Mon, 13 Jul 2026 19:59:37 +0200 Subject: Add device trees for MHS3.5 SPI devices Signed-off-by: Mel --- dts/mhs35-touch-overlay.dts | 91 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 dts/mhs35-touch-overlay.dts (limited to 'dts/mhs35-touch-overlay.dts') diff --git a/dts/mhs35-touch-overlay.dts b/dts/mhs35-touch-overlay.dts new file mode 100644 index 0000000..3b1c256 --- /dev/null +++ b/dts/mhs35-touch-overlay.dts @@ -0,0 +1,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. + */ + +/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"; + }; +}; -- cgit 1.4.1