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