summaryrefslogtreecommitdiff
path: root/modules/hardware
diff options
context:
space:
mode:
authorMel <mel@rnrd.eu>2025-04-27 17:21:04 +0200
committerMel <mel@rnrd.eu>2025-04-27 17:21:04 +0200
commit91df1f208c71c60dfaa457f2faf0ad4d2836b2ce (patch)
tree8c9451c65990c5ab69b704d0a70f7c3a5d5bb6f2 /modules/hardware
parent0fe29bb54147024c5e36de919fe663aa856e0eb4 (diff)
downloadnetwork-91df1f208c71c60dfaa457f2faf0ad4d2836b2ce.tar.zst
network-91df1f208c71c60dfaa457f2faf0ad4d2836b2ce.zip
Add device tree overlay for ADS7846 touchscreen
Signed-off-by: Mel <mel@rnrd.eu>
Diffstat (limited to 'modules/hardware')
-rw-r--r--modules/hardware/ads7846.nix104
1 files changed, 104 insertions, 0 deletions
diff --git a/modules/hardware/ads7846.nix b/modules/hardware/ads7846.nix
new file mode 100644
index 0000000..cf1131e
--- /dev/null
+++ b/modules/hardware/ads7846.nix
@@ -0,0 +1,104 @@
+{ ... }:
+
+{
+ hardware.deviceTree = {
+ overlays = [
+ {
+ name = "ads7846-overlay";
+ # taken from raspberry-pi kernel tree:
+ # https://github.com/raspberrypi/linux/blob/rpi-6.6.y/arch/arm/boot/dts/overlays/ads7846-overlay.dts
+ dtsText = ''
+ /*
+ * Generic Device Tree overlay for the ADS7846 touch controller
+ *
+ */
+
+ /dts-v1/;
+ /plugin/;
+
+ / {
+ compatible = "brcm,bcm2835";
+
+ fragment@0 {
+ target = <&spi0>;
+ __overlay__ {
+ status = "okay";
+ };
+ };
+
+ fragment@1 {
+ target = <&spidev0>;
+ __overlay__ {
+ status = "disabled";
+ };
+ };
+
+ fragment@2 {
+ target = <&spidev1>;
+ __overlay__ {
+ status = "disabled";
+ };
+ };
+
+ fragment@3 {
+ target = <&gpio>;
+ __overlay__ {
+ ads7846_pins: ads7846_pins {
+ brcm,pins = <255>; /* illegal default value */
+ brcm,function = <0>; /* in */
+ brcm,pull = <0>; /* none */
+ };
+ };
+ };
+
+ fragment@4 {
+ target = <&spi0>;
+ __overlay__ {
+ /* needed to avoid dtc warning */
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ ads7846: ads7846@1 {
+ compatible = "ti,ads7846";
+ reg = <1>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&ads7846_pins>;
+
+ spi-max-frequency = <2000000>;
+ interrupts = <255 2>; /* high-to-low edge triggered */
+ interrupt-parent = <&gpio>;
+ pendown-gpio = <&gpio 255 1>;
+
+ /* driver defaults */
+ ti,x-min = /bits/ 16 <0>;
+ ti,y-min = /bits/ 16 <0>;
+ ti,x-max = /bits/ 16 <0x0FFF>;
+ ti,y-max = /bits/ 16 <0x0FFF>;
+ ti,pressure-min = /bits/ 16 <0>;
+ ti,pressure-max = /bits/ 16 <0xFFFF>;
+ ti,x-plate-ohms = /bits/ 16 <400>;
+ };
+ };
+ };
+ __overrides__ {
+ cs = <&ads7846>,"reg:0";
+ speed = <&ads7846>,"spi-max-frequency:0";
+ penirq = <&ads7846_pins>,"brcm,pins:0", /* REQUIRED */
+ <&ads7846>,"interrupts:0",
+ <&ads7846>,"pendown-gpio:4";
+ penirq_pull = <&ads7846_pins>,"brcm,pull:0";
+ swapxy = <&ads7846>,"ti,swap-xy?";
+ xmin = <&ads7846>,"ti,x-min;0";
+ ymin = <&ads7846>,"ti,y-min;0";
+ xmax = <&ads7846>,"ti,x-max;0";
+ ymax = <&ads7846>,"ti,y-max;0";
+ pmin = <&ads7846>,"ti,pressure-min;0";
+ pmax = <&ads7846>,"ti,pressure-max;0";
+ xohms = <&ads7846>,"ti,x-plate-ohms;0";
+ };
+ };
+ '';
+ }
+ ];
+ };
+}