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