// 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"; }; };