1# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/mfd/st,stmpe.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: STMicroelectonics Port Expander (STMPE)
8
9description: STMicroelectronics Port Expander (STMPE) is a series of slow
10  bus controllers for various expanded peripherals such as GPIO, keypad,
11  touchscreen, ADC, PWM or rotator. It can contain one or several different
12  peripherals connected to SPI or I2C.
13
14maintainers:
15  - Linus Walleij <linus.walleij@linaro.org>
16
17allOf:
18  - $ref: /schemas/spi/spi-peripheral-props.yaml#
19
20properties:
21  compatible:
22    enum:
23      - st,stmpe601
24      - st,stmpe801
25      - st,stmpe811
26      - st,stmpe1600
27      - st,stmpe1601
28      - st,stmpe2401
29      - st,stmpe2403
30
31  reg:
32    maxItems: 1
33
34  interrupts:
35    maxItems: 1
36
37  vcc-supply: true
38
39  vio-supply: true
40
41  reset-gpios:
42    maxItems: 1
43
44  wakeup-source: true
45
46  st,autosleep-timeout:
47    $ref: /schemas/types.yaml#/definitions/uint32
48    enum: [ 4, 16, 32, 64, 128, 256, 512, 1024 ]
49    description: Time idle before going to automatic sleep to save power
50
51  st,sample-time:
52    $ref: /schemas/types.yaml#/definitions/uint32
53    enum: [ 0, 1, 2, 3, 4, 5, 6 ]
54    description: |
55      Sample time per iteration
56      0 = 36 clock ticks
57      1 = 44 clock ticks
58      2 = 56 clock ticks
59      3 = 64 clock ticks
60      4 = 80 clock ticks - recommended
61      5 = 96 clock ticks
62      6 = 124 clock ticks
63
64  st,mod-12b:
65    $ref: /schemas/types.yaml#/definitions/uint32
66    enum: [ 0, 1 ]
67    description: ADC bit mode 0 = 10bit ADC, 1 = 12bit ADC
68
69  st,ref-sel:
70    $ref: /schemas/types.yaml#/definitions/uint32
71    enum: [ 0, 1 ]
72    description: ADC reference source 0 = internal, 1 = external
73
74  st,adc-freq:
75    $ref: /schemas/types.yaml#/definitions/uint32
76    enum: [ 0, 1, 2, 3 ]
77    description: |
78      ADC clock speed
79      0 = 1.625 MHz
80      1 = 3.25 MHz
81      2, 3 = 6.5 MHz
82
83  adc:
84    type: object
85    $ref: /schemas/iio/adc/st,stmpe-adc.yaml#
86
87  gpio:
88    type: object
89    $ref: /schemas/gpio/st,stmpe-gpio.yaml#
90
91  keyboard-controller:
92    type: object
93    $ref: /schemas/input/matrix-keymap.yaml#
94
95    unevaluatedProperties: false
96
97    properties:
98      compatible:
99        const: st,stmpe-keypad
100
101      debounce-interval:
102        description: Debouncing interval in milliseconds
103        $ref: /schemas/types.yaml#/definitions/uint32
104
105      st,no-autorepeat:
106        description: If present, the keys will not autorepeat when pressed
107        $ref: /schemas/types.yaml#/definitions/flag
108
109      st,scan-count:
110        description: Scanning cycles elapsed before key data is updated
111        $ref: /schemas/types.yaml#/definitions/uint32
112
113    required:
114      - compatible
115      - linux,keymap
116
117  pwm:
118    type: object
119    $ref: /schemas/pwm/pwm.yaml#
120
121    unevaluatedProperties: false
122
123    properties:
124      compatible:
125        const: st,stmpe-pwm
126
127      "#pwm-cells":
128        const: 2
129
130  touchscreen:
131    type: object
132    $ref: /schemas/input/touchscreen/touchscreen.yaml#
133
134    unevaluatedProperties: false
135
136    properties:
137      compatible:
138        const: st,stmpe-ts
139
140      st,ave-ctrl:
141        $ref: /schemas/types.yaml#/definitions/uint32
142        enum: [ 0, 1, 2, 3 ]
143        description: |
144          Sample average control
145          0 = 1 sample
146          1 = 2 samples
147          2 = 4 samples
148          3 = 8 samples
149
150      st,touch-det-delay:
151        $ref: /schemas/types.yaml#/definitions/uint32
152        enum: [ 0, 1, 2, 3, 4, 5, 6, 7 ]
153        description: |
154          Touch detection delay
155          0 = 10 us
156          1 = 50 us
157          2 = 100 us
158          3 = 500 us - recommended
159          4 = 1 ms
160          5 = 5 ms
161          6 = 10 ms
162          7 = 50 ms
163
164      st,settling:
165        $ref: /schemas/types.yaml#/definitions/uint32
166        enum: [ 0, 1, 2, 3, 4, 5, 6, 7 ]
167        description: |
168          Panel driver settling time
169          0 = 10 us
170          1 = 100 us
171          2 = 500 us - recommended
172          3 = 1 ms
173          4 = 5 ms
174          5 = 10 ms
175          6 = 50 ms
176          7 = 100 ms
177
178      st,fraction-z:
179        $ref: /schemas/types.yaml#/definitions/uint32
180        enum: [ 0, 1, 2, 3, 4, 5, 6, 7 ]
181        description: Length of the fractional part in z, recommended is 7
182          (fraction-z ([0..7]) = Count of the fractional part)
183
184      st,i-drive:
185        $ref: /schemas/types.yaml#/definitions/uint32
186        enum: [ 0, 1 ]
187        description: |
188          current limit value of the touchscreen drivers
189          0 = 20 mA (typical 35 mA max)
190          1 = 50 mA (typical 80 mA max)
191
192    required:
193      - compatible
194
195additionalProperties: false
196
197required:
198  - compatible
199  - reg
200  - interrupts
201
202examples:
203  - |
204    #include <dt-bindings/gpio/gpio.h>
205    #include <dt-bindings/interrupt-controller/irq.h>
206    #include <dt-bindings/input/input.h>
207    i2c {
208      #address-cells = <1>;
209      #size-cells = <0>;
210
211      port-expander@43 {
212        compatible = "st,stmpe2401";
213        reg = <0x43>;
214        reset-gpios = <&gpio 13 GPIO_ACTIVE_LOW>;
215        interrupts = <26 IRQ_TYPE_EDGE_FALLING>;
216        interrupt-parent = <&gpio>;
217        vcc-supply = <&db8500_vsmps2_reg>;
218        vio-supply = <&db8500_vsmps2_reg>;
219        wakeup-source;
220        st,autosleep-timeout = <1024>;
221
222        gpio {
223          compatible = "st,stmpe-gpio";
224          gpio-controller;
225          #gpio-cells = <2>;
226          interrupt-controller;
227          #interrupt-cells = <2>;
228          st,norequest-mask = <0xf0f002>;
229        };
230
231        keyboard-controller {
232          compatible = "st,stmpe-keypad";
233          debounce-interval = <64>;
234          st,scan-count = <8>;
235          st,no-autorepeat;
236          keypad,num-rows = <8>;
237          keypad,num-columns = <8>;
238          linux,keymap = <
239              MATRIX_KEY(0x00, 0x00, KEY_1)
240              MATRIX_KEY(0x00, 0x01, KEY_2)
241              MATRIX_KEY(0x00, 0x02, KEY_3)
242              MATRIX_KEY(0x00, 0x03, KEY_4)
243              MATRIX_KEY(0x00, 0x04, KEY_5)
244              MATRIX_KEY(0x00, 0x05, KEY_6)
245              MATRIX_KEY(0x00, 0x06, KEY_7)
246              MATRIX_KEY(0x00, 0x07, KEY_8)
247              MATRIX_KEY(0x00, 0x08, KEY_9)
248              MATRIX_KEY(0x00, 0x09, KEY_0)
249          >;
250        };
251
252        pwm {
253          compatible = "st,stmpe-pwm";
254          #pwm-cells = <2>;
255        };
256      };
257
258      port-expander@41 {
259        compatible = "st,stmpe811";
260        reg = <0x41>;
261        interrupts = <10 IRQ_TYPE_LEVEL_LOW>;
262        interrupt-parent = <&gpio>;
263        st,adc-freq = <1>;
264        st,mod-12b = <1>;
265        st,ref-sel = <0>;
266        st,sample-time = <4>;
267
268        adc {
269          compatible = "st,stmpe-adc";
270          st,norequest-mask = <0x0f>;
271          #io-channel-cells = <1>;
272        };
273
274        gpio {
275          compatible = "st,stmpe-gpio";
276          gpio-controller;
277          #gpio-cells = <2>;
278          interrupt-controller;
279          #interrupt-cells = <2>;
280        };
281
282        pwm {
283          compatible = "st,stmpe-pwm";
284          #pwm-cells = <2>;
285        };
286
287        touchscreen {
288          compatible = "st,stmpe-ts";
289          st,ave-ctrl = <3>;
290          st,touch-det-delay = <5>;
291          st,settling = <3>;
292          st,fraction-z = <7>;
293          st,i-drive = <1>;
294        };
295      };
296    };
297...
298