1aa1a8ff2SEmmanuel Vadot# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
2aa1a8ff2SEmmanuel Vadot%YAML 1.2
3aa1a8ff2SEmmanuel Vadot---
4aa1a8ff2SEmmanuel Vadot$id: http://devicetree.org/schemas/input/syna,rmi4.yaml#
5aa1a8ff2SEmmanuel Vadot$schema: http://devicetree.org/meta-schemas/core.yaml#
6aa1a8ff2SEmmanuel Vadot
7aa1a8ff2SEmmanuel Vadottitle: Synaptics RMI4 compliant devices
8aa1a8ff2SEmmanuel Vadot
9aa1a8ff2SEmmanuel Vadotmaintainers:
10aa1a8ff2SEmmanuel Vadot  - Jason A. Donenfeld <Jason@zx2c4.com>
11aa1a8ff2SEmmanuel Vadot  - Matthias Schiffer <matthias.schiffer@ew.tq-group.com
12aa1a8ff2SEmmanuel Vadot  - Vincent Huang <vincent.huang@tw.synaptics.com>
13aa1a8ff2SEmmanuel Vadot
14aa1a8ff2SEmmanuel Vadotdescription: |
15aa1a8ff2SEmmanuel Vadot  The Synaptics RMI4 (Register Mapped Interface 4) core is able to support RMI4
16aa1a8ff2SEmmanuel Vadot  devices using different transports (I2C, SPI) and different functions (e.g.
17aa1a8ff2SEmmanuel Vadot  Function 1, 2D sensors using Function 11 or 12).
18aa1a8ff2SEmmanuel Vadot
19aa1a8ff2SEmmanuel Vadotproperties:
20aa1a8ff2SEmmanuel Vadot  compatible:
21aa1a8ff2SEmmanuel Vadot    enum:
22aa1a8ff2SEmmanuel Vadot      - syna,rmi4-i2c
23aa1a8ff2SEmmanuel Vadot      - syna,rmi4-spi
24aa1a8ff2SEmmanuel Vadot
25aa1a8ff2SEmmanuel Vadot  reg:
26aa1a8ff2SEmmanuel Vadot    maxItems: 1
27aa1a8ff2SEmmanuel Vadot
28aa1a8ff2SEmmanuel Vadot  '#address-cells':
29aa1a8ff2SEmmanuel Vadot    const: 1
30aa1a8ff2SEmmanuel Vadot
31aa1a8ff2SEmmanuel Vadot  '#size-cells':
32aa1a8ff2SEmmanuel Vadot    const: 0
33aa1a8ff2SEmmanuel Vadot
34aa1a8ff2SEmmanuel Vadot  interrupts:
35aa1a8ff2SEmmanuel Vadot    maxItems: 1
36aa1a8ff2SEmmanuel Vadot
37aa1a8ff2SEmmanuel Vadot  reset-gpios:
38aa1a8ff2SEmmanuel Vadot    maxItems: 1
39aa1a8ff2SEmmanuel Vadot    description: Active low signal
40aa1a8ff2SEmmanuel Vadot
41aa1a8ff2SEmmanuel Vadot  spi-cpha: true
42aa1a8ff2SEmmanuel Vadot  spi-cpol: true
43aa1a8ff2SEmmanuel Vadot
44aa1a8ff2SEmmanuel Vadot  syna,reset-delay-ms:
45aa1a8ff2SEmmanuel Vadot    description:
46aa1a8ff2SEmmanuel Vadot      Delay to wait after resetting the device.
47aa1a8ff2SEmmanuel Vadot
48aa1a8ff2SEmmanuel Vadot  syna,startup-delay-ms:
49aa1a8ff2SEmmanuel Vadot    description:
50aa1a8ff2SEmmanuel Vadot      Delay to wait after powering on the device.
51aa1a8ff2SEmmanuel Vadot
52aa1a8ff2SEmmanuel Vadot  vdd-supply: true
53aa1a8ff2SEmmanuel Vadot  vio-supply: true
54aa1a8ff2SEmmanuel Vadot
55aa1a8ff2SEmmanuel Vadot  rmi4-f01@1:
56aa1a8ff2SEmmanuel Vadot    type: object
57aa1a8ff2SEmmanuel Vadot    additionalProperties: false
58aa1a8ff2SEmmanuel Vadot    description:
59aa1a8ff2SEmmanuel Vadot      Function 1
60aa1a8ff2SEmmanuel Vadot
61aa1a8ff2SEmmanuel Vadot    properties:
62aa1a8ff2SEmmanuel Vadot      reg:
63aa1a8ff2SEmmanuel Vadot        maxItems: 1
64aa1a8ff2SEmmanuel Vadot
65aa1a8ff2SEmmanuel Vadot      syna,nosleep-mode:
66aa1a8ff2SEmmanuel Vadot        $ref: /schemas/types.yaml#/definitions/uint32
67aa1a8ff2SEmmanuel Vadot        enum: [0, 1, 2]
68aa1a8ff2SEmmanuel Vadot        description:
69aa1a8ff2SEmmanuel Vadot          If set the device will run at full power without sleeping.  nosleep
70aa1a8ff2SEmmanuel Vadot          has 3 modes, 0 will not change the default setting, 1 will disable
71aa1a8ff2SEmmanuel Vadot          nosleep (allow sleeping), and 2 will enable nosleep (disabling
72aa1a8ff2SEmmanuel Vadot          sleep).
73aa1a8ff2SEmmanuel Vadot
74aa1a8ff2SEmmanuel Vadot      syna,wakeup-threshold:
75aa1a8ff2SEmmanuel Vadot        $ref: /schemas/types.yaml#/definitions/uint32
76aa1a8ff2SEmmanuel Vadot        description:
77aa1a8ff2SEmmanuel Vadot          Defines the amplitude of the disturbance to the background
78aa1a8ff2SEmmanuel Vadot          capacitance that will cause the device to wake from dozing.
79aa1a8ff2SEmmanuel Vadot
80aa1a8ff2SEmmanuel Vadot      syna,doze-holdoff-ms:
81aa1a8ff2SEmmanuel Vadot        description:
82aa1a8ff2SEmmanuel Vadot          The delay to wait after the last finger lift and the first doze
83aa1a8ff2SEmmanuel Vadot          cycle.
84aa1a8ff2SEmmanuel Vadot
85aa1a8ff2SEmmanuel Vadot      syna,doze-interval-ms:
86aa1a8ff2SEmmanuel Vadot        description:
87aa1a8ff2SEmmanuel Vadot          The time period that the device sleeps between finger activity.
88aa1a8ff2SEmmanuel Vadot
89aa1a8ff2SEmmanuel Vadot    required:
90aa1a8ff2SEmmanuel Vadot      - reg
91aa1a8ff2SEmmanuel Vadot
92aa1a8ff2SEmmanuel VadotpatternProperties:
93aa1a8ff2SEmmanuel Vadot  "^rmi4-f1[12]@1[12]$":
94aa1a8ff2SEmmanuel Vadot    type: object
95aa1a8ff2SEmmanuel Vadot    unevaluatedProperties: false
96aa1a8ff2SEmmanuel Vadot    $ref: /schemas/input/touchscreen/touchscreen.yaml#
97aa1a8ff2SEmmanuel Vadot    description:
98aa1a8ff2SEmmanuel Vadot      RMI4 Function 11 and Function 12 are for 2D touch position sensing.
99aa1a8ff2SEmmanuel Vadot
100aa1a8ff2SEmmanuel Vadot    properties:
101aa1a8ff2SEmmanuel Vadot      reg:
102aa1a8ff2SEmmanuel Vadot        maxItems: 1
103aa1a8ff2SEmmanuel Vadot
104aa1a8ff2SEmmanuel Vadot      syna,clip-x-low:
105aa1a8ff2SEmmanuel Vadot        $ref: /schemas/types.yaml#/definitions/uint32
106aa1a8ff2SEmmanuel Vadot        description:
107aa1a8ff2SEmmanuel Vadot          Minimum value for X.
108aa1a8ff2SEmmanuel Vadot
109aa1a8ff2SEmmanuel Vadot      syna,clip-y-low:
110aa1a8ff2SEmmanuel Vadot        $ref: /schemas/types.yaml#/definitions/uint32
111aa1a8ff2SEmmanuel Vadot        description:
112aa1a8ff2SEmmanuel Vadot          Minimum value for Y.
113aa1a8ff2SEmmanuel Vadot
114aa1a8ff2SEmmanuel Vadot      syna,clip-x-high:
115aa1a8ff2SEmmanuel Vadot        $ref: /schemas/types.yaml#/definitions/uint32
116aa1a8ff2SEmmanuel Vadot        description:
117aa1a8ff2SEmmanuel Vadot          Maximum value for X.
118aa1a8ff2SEmmanuel Vadot
119aa1a8ff2SEmmanuel Vadot      syna,clip-y-high:
120aa1a8ff2SEmmanuel Vadot        $ref: /schemas/types.yaml#/definitions/uint32
121aa1a8ff2SEmmanuel Vadot        description:
122aa1a8ff2SEmmanuel Vadot          Maximum value for Y.
123aa1a8ff2SEmmanuel Vadot
124aa1a8ff2SEmmanuel Vadot      syna,offset-x:
125aa1a8ff2SEmmanuel Vadot        $ref: /schemas/types.yaml#/definitions/uint32
126aa1a8ff2SEmmanuel Vadot        description:
127aa1a8ff2SEmmanuel Vadot          Add an offset to X.
128aa1a8ff2SEmmanuel Vadot
129aa1a8ff2SEmmanuel Vadot      syna,offset-y:
130aa1a8ff2SEmmanuel Vadot        $ref: /schemas/types.yaml#/definitions/uint32
131aa1a8ff2SEmmanuel Vadot        description:
132aa1a8ff2SEmmanuel Vadot          Add an offset to Y.
133aa1a8ff2SEmmanuel Vadot
134aa1a8ff2SEmmanuel Vadot      syna,delta-x-threshold:
135aa1a8ff2SEmmanuel Vadot        $ref: /schemas/types.yaml#/definitions/uint32
136aa1a8ff2SEmmanuel Vadot        description:
137aa1a8ff2SEmmanuel Vadot          Minimum distance on the X axis required to generate an interrupt in
138aa1a8ff2SEmmanuel Vadot          reduced reporting mode.
139aa1a8ff2SEmmanuel Vadot
140aa1a8ff2SEmmanuel Vadot      syna,delta-y-threshold:
141aa1a8ff2SEmmanuel Vadot        $ref: /schemas/types.yaml#/definitions/uint32
142aa1a8ff2SEmmanuel Vadot        description:
143aa1a8ff2SEmmanuel Vadot          Minimum distance on the Y axis required to generate an interrupt in
144aa1a8ff2SEmmanuel Vadot          reduced reporting mode.
145aa1a8ff2SEmmanuel Vadot
146aa1a8ff2SEmmanuel Vadot      syna,sensor-type:
147aa1a8ff2SEmmanuel Vadot        $ref: /schemas/types.yaml#/definitions/uint32
148aa1a8ff2SEmmanuel Vadot        enum: [1, 2]
149aa1a8ff2SEmmanuel Vadot        description: |
150aa1a8ff2SEmmanuel Vadot          Sensor type: 1 for touchscreen 2 for touchpad.
151aa1a8ff2SEmmanuel Vadot
152aa1a8ff2SEmmanuel Vadot      syna,disable-report-mask:
153aa1a8ff2SEmmanuel Vadot        $ref: /schemas/types.yaml#/definitions/uint32
154aa1a8ff2SEmmanuel Vadot        description:
155aa1a8ff2SEmmanuel Vadot          Mask for disabling posiiton reporting. Used to disable reporing
156aa1a8ff2SEmmanuel Vadot          absolute position data.
157aa1a8ff2SEmmanuel Vadot
158aa1a8ff2SEmmanuel Vadot      syna,rezero-wait-ms:
159aa1a8ff2SEmmanuel Vadot        description:
160aa1a8ff2SEmmanuel Vadot          Time to wait after issuing a rezero command.
161aa1a8ff2SEmmanuel Vadot
162aa1a8ff2SEmmanuel Vadot    required:
163aa1a8ff2SEmmanuel Vadot      - reg
164aa1a8ff2SEmmanuel Vadot
165aa1a8ff2SEmmanuel Vadot  "^rmi4-f[0-9a-f]+@[0-9a-f]+$":
166aa1a8ff2SEmmanuel Vadot    type: object
167*84943d6fSEmmanuel Vadot    additionalProperties: true
168*84943d6fSEmmanuel Vadot
169aa1a8ff2SEmmanuel Vadot    description:
170aa1a8ff2SEmmanuel Vadot      Other functions, not documented yet.
171aa1a8ff2SEmmanuel Vadot
172aa1a8ff2SEmmanuel Vadot    properties:
173aa1a8ff2SEmmanuel Vadot      reg:
174aa1a8ff2SEmmanuel Vadot        maxItems: 1
175aa1a8ff2SEmmanuel Vadot
176aa1a8ff2SEmmanuel Vadot    required:
177aa1a8ff2SEmmanuel Vadot      - reg
178aa1a8ff2SEmmanuel Vadot
179aa1a8ff2SEmmanuel Vadotrequired:
180aa1a8ff2SEmmanuel Vadot  - compatible
181aa1a8ff2SEmmanuel Vadot  - reg
182aa1a8ff2SEmmanuel Vadot
183aa1a8ff2SEmmanuel VadotunevaluatedProperties: false
184aa1a8ff2SEmmanuel Vadot
185aa1a8ff2SEmmanuel VadotallOf:
186aa1a8ff2SEmmanuel Vadot  - $ref: /schemas/spi/spi-peripheral-props.yaml#
187aa1a8ff2SEmmanuel Vadot
188aa1a8ff2SEmmanuel Vadot  - if:
189aa1a8ff2SEmmanuel Vadot      properties:
190aa1a8ff2SEmmanuel Vadot        compatible:
191aa1a8ff2SEmmanuel Vadot          contains:
192aa1a8ff2SEmmanuel Vadot            const: syna,rmi4-i2c
193aa1a8ff2SEmmanuel Vadot    then:
194aa1a8ff2SEmmanuel Vadot      properties:
195aa1a8ff2SEmmanuel Vadot        spi-rx-delay-us: false
196aa1a8ff2SEmmanuel Vadot        spi-tx-delay-us: false
197aa1a8ff2SEmmanuel Vadot    else:
198aa1a8ff2SEmmanuel Vadot      properties:
199aa1a8ff2SEmmanuel Vadot        syna,reset-delay-ms: false
200aa1a8ff2SEmmanuel Vadot        syna,startup-delay-ms: false
201aa1a8ff2SEmmanuel Vadot
202aa1a8ff2SEmmanuel Vadotexamples:
203aa1a8ff2SEmmanuel Vadot  - |
204aa1a8ff2SEmmanuel Vadot    #include <dt-bindings/interrupt-controller/irq.h>
205aa1a8ff2SEmmanuel Vadot
206aa1a8ff2SEmmanuel Vadot    i2c {
207aa1a8ff2SEmmanuel Vadot        #address-cells = <1>;
208aa1a8ff2SEmmanuel Vadot        #size-cells = <0>;
209aa1a8ff2SEmmanuel Vadot
210aa1a8ff2SEmmanuel Vadot        touchscreen@20 {
211aa1a8ff2SEmmanuel Vadot            compatible = "syna,rmi4-i2c";
212aa1a8ff2SEmmanuel Vadot            reg = <0x20>;
213aa1a8ff2SEmmanuel Vadot            interrupt-parent = <&gpx1>;
214aa1a8ff2SEmmanuel Vadot            interrupts = <6 IRQ_TYPE_EDGE_FALLING>;
215aa1a8ff2SEmmanuel Vadot
216aa1a8ff2SEmmanuel Vadot            syna,startup-delay-ms = <100>;
217aa1a8ff2SEmmanuel Vadot            vdd-supply = <&tsp_vdd>;
218aa1a8ff2SEmmanuel Vadot            vio-supply = <&ldo32_reg>;
219aa1a8ff2SEmmanuel Vadot
220aa1a8ff2SEmmanuel Vadot            pinctrl-0 = <&touch_irq>;
221aa1a8ff2SEmmanuel Vadot            pinctrl-names = "default";
222aa1a8ff2SEmmanuel Vadot            #address-cells = <1>;
223aa1a8ff2SEmmanuel Vadot            #size-cells = <0>;
224aa1a8ff2SEmmanuel Vadot
225aa1a8ff2SEmmanuel Vadot            rmi4-f01@1 {
226aa1a8ff2SEmmanuel Vadot                reg = <0x1>;
227aa1a8ff2SEmmanuel Vadot                syna,nosleep-mode = <1>;
228aa1a8ff2SEmmanuel Vadot            };
229aa1a8ff2SEmmanuel Vadot
230aa1a8ff2SEmmanuel Vadot            rmi4-f12@12 {
231aa1a8ff2SEmmanuel Vadot                reg = <0x12>;
232aa1a8ff2SEmmanuel Vadot                syna,sensor-type = <1>;
233aa1a8ff2SEmmanuel Vadot            };
234aa1a8ff2SEmmanuel Vadot
235aa1a8ff2SEmmanuel Vadot            rmi4-f1a@1a {
236aa1a8ff2SEmmanuel Vadot                reg = <0x1a>;
237aa1a8ff2SEmmanuel Vadot            };
238aa1a8ff2SEmmanuel Vadot        };
239aa1a8ff2SEmmanuel Vadot    };
240aa1a8ff2SEmmanuel Vadot
241aa1a8ff2SEmmanuel Vadot  - |
242aa1a8ff2SEmmanuel Vadot    #include <dt-bindings/interrupt-controller/irq.h>
243aa1a8ff2SEmmanuel Vadot
244aa1a8ff2SEmmanuel Vadot    spi {
245aa1a8ff2SEmmanuel Vadot        #address-cells = <1>;
246aa1a8ff2SEmmanuel Vadot        #size-cells = <0>;
247aa1a8ff2SEmmanuel Vadot
248aa1a8ff2SEmmanuel Vadot        touchscreen@0 {
249aa1a8ff2SEmmanuel Vadot            compatible = "syna,rmi4-spi";
250aa1a8ff2SEmmanuel Vadot            reg = <0x0>;
251aa1a8ff2SEmmanuel Vadot            interrupt-parent = <&gpx1>;
252aa1a8ff2SEmmanuel Vadot            interrupts = <6 IRQ_TYPE_EDGE_FALLING>;
253aa1a8ff2SEmmanuel Vadot
254aa1a8ff2SEmmanuel Vadot            spi-max-frequency = <4000000>;
255aa1a8ff2SEmmanuel Vadot            spi-rx-delay-us = <30>;
256aa1a8ff2SEmmanuel Vadot            spi-cpha;
257aa1a8ff2SEmmanuel Vadot            spi-cpol;
258aa1a8ff2SEmmanuel Vadot
259aa1a8ff2SEmmanuel Vadot            #address-cells = <1>;
260aa1a8ff2SEmmanuel Vadot            #size-cells = <0>;
261aa1a8ff2SEmmanuel Vadot
262aa1a8ff2SEmmanuel Vadot            rmi4-f01@1 {
263aa1a8ff2SEmmanuel Vadot                reg = <0x1>;
264aa1a8ff2SEmmanuel Vadot                syna,nosleep-mode = <1>;
265aa1a8ff2SEmmanuel Vadot            };
266aa1a8ff2SEmmanuel Vadot
267aa1a8ff2SEmmanuel Vadot            rmi4-f11@11 {
268aa1a8ff2SEmmanuel Vadot                reg = <0x11>;
269aa1a8ff2SEmmanuel Vadot                touchscreen-inverted-y;
270aa1a8ff2SEmmanuel Vadot                syna,sensor-type = <2>;
271aa1a8ff2SEmmanuel Vadot            };
272aa1a8ff2SEmmanuel Vadot        };
273aa1a8ff2SEmmanuel Vadot    };
274