# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) %YAML 1.2 --- $id: http://devicetree.org/schemas/mfd/st,stmpe.yaml# $schema: http://devicetree.org/meta-schemas/core.yaml# title: STMicroelectonics Port Expander (STMPE) description: STMicroelectronics Port Expander (STMPE) is a series of slow bus controllers for various expanded peripherals such as GPIO, keypad, touchscreen, ADC, PWM or rotator. It can contain one or several different peripherals connected to SPI or I2C. maintainers: - Linus Walleij allOf: - $ref: /schemas/spi/spi-peripheral-props.yaml# properties: compatible: enum: - st,stmpe601 - st,stmpe801 - st,stmpe811 - st,stmpe1600 - st,stmpe1601 - st,stmpe2401 - st,stmpe2403 reg: maxItems: 1 interrupts: maxItems: 1 vcc-supply: true vio-supply: true reset-gpios: maxItems: 1 wakeup-source: true st,autosleep-timeout: $ref: /schemas/types.yaml#/definitions/uint32 enum: [ 4, 16, 32, 64, 128, 256, 512, 1024 ] description: Time idle before going to automatic sleep to save power st,sample-time: $ref: /schemas/types.yaml#/definitions/uint32 enum: [ 0, 1, 2, 3, 4, 5, 6 ] description: | Sample time per iteration 0 = 36 clock ticks 1 = 44 clock ticks 2 = 56 clock ticks 3 = 64 clock ticks 4 = 80 clock ticks - recommended 5 = 96 clock ticks 6 = 124 clock ticks st,mod-12b: $ref: /schemas/types.yaml#/definitions/uint32 enum: [ 0, 1 ] description: ADC bit mode 0 = 10bit ADC, 1 = 12bit ADC st,ref-sel: $ref: /schemas/types.yaml#/definitions/uint32 enum: [ 0, 1 ] description: ADC reference source 0 = internal, 1 = external st,adc-freq: $ref: /schemas/types.yaml#/definitions/uint32 enum: [ 0, 1, 2, 3 ] description: | ADC clock speed 0 = 1.625 MHz 1 = 3.25 MHz 2, 3 = 6.5 MHz adc: type: object $ref: /schemas/iio/adc/st,stmpe-adc.yaml# gpio: type: object $ref: /schemas/gpio/st,stmpe-gpio.yaml# keyboard-controller: type: object $ref: /schemas/input/matrix-keymap.yaml# unevaluatedProperties: false properties: compatible: const: st,stmpe-keypad debounce-interval: description: Debouncing interval in milliseconds $ref: /schemas/types.yaml#/definitions/uint32 st,no-autorepeat: description: If present, the keys will not autorepeat when pressed $ref: /schemas/types.yaml#/definitions/flag st,scan-count: description: Scanning cycles elapsed before key data is updated $ref: /schemas/types.yaml#/definitions/uint32 required: - compatible - linux,keymap pwm: type: object $ref: /schemas/pwm/pwm.yaml# unevaluatedProperties: false properties: compatible: const: st,stmpe-pwm "#pwm-cells": const: 2 touchscreen: type: object $ref: /schemas/input/touchscreen/touchscreen.yaml# unevaluatedProperties: false properties: compatible: const: st,stmpe-ts st,ave-ctrl: $ref: /schemas/types.yaml#/definitions/uint32 enum: [ 0, 1, 2, 3 ] description: | Sample average control 0 = 1 sample 1 = 2 samples 2 = 4 samples 3 = 8 samples st,touch-det-delay: $ref: /schemas/types.yaml#/definitions/uint32 enum: [ 0, 1, 2, 3, 4, 5, 6, 7 ] description: | Touch detection delay 0 = 10 us 1 = 50 us 2 = 100 us 3 = 500 us - recommended 4 = 1 ms 5 = 5 ms 6 = 10 ms 7 = 50 ms st,settling: $ref: /schemas/types.yaml#/definitions/uint32 enum: [ 0, 1, 2, 3, 4, 5, 6, 7 ] description: | Panel driver settling time 0 = 10 us 1 = 100 us 2 = 500 us - recommended 3 = 1 ms 4 = 5 ms 5 = 10 ms 6 = 50 ms 7 = 100 ms st,fraction-z: $ref: /schemas/types.yaml#/definitions/uint32 enum: [ 0, 1, 2, 3, 4, 5, 6, 7 ] description: Length of the fractional part in z, recommended is 7 (fraction-z ([0..7]) = Count of the fractional part) st,i-drive: $ref: /schemas/types.yaml#/definitions/uint32 enum: [ 0, 1 ] description: | current limit value of the touchscreen drivers 0 = 20 mA (typical 35 mA max) 1 = 50 mA (typical 80 mA max) required: - compatible additionalProperties: false required: - compatible - reg - interrupts examples: - | #include #include #include i2c { #address-cells = <1>; #size-cells = <0>; port-expander@43 { compatible = "st,stmpe2401"; reg = <0x43>; reset-gpios = <&gpio 13 GPIO_ACTIVE_LOW>; interrupts = <26 IRQ_TYPE_EDGE_FALLING>; interrupt-parent = <&gpio>; vcc-supply = <&db8500_vsmps2_reg>; vio-supply = <&db8500_vsmps2_reg>; wakeup-source; st,autosleep-timeout = <1024>; gpio { compatible = "st,stmpe-gpio"; gpio-controller; #gpio-cells = <2>; interrupt-controller; #interrupt-cells = <2>; st,norequest-mask = <0xf0f002>; }; keyboard-controller { compatible = "st,stmpe-keypad"; debounce-interval = <64>; st,scan-count = <8>; st,no-autorepeat; keypad,num-rows = <8>; keypad,num-columns = <8>; linux,keymap = < MATRIX_KEY(0x00, 0x00, KEY_1) MATRIX_KEY(0x00, 0x01, KEY_2) MATRIX_KEY(0x00, 0x02, KEY_3) MATRIX_KEY(0x00, 0x03, KEY_4) MATRIX_KEY(0x00, 0x04, KEY_5) MATRIX_KEY(0x00, 0x05, KEY_6) MATRIX_KEY(0x00, 0x06, KEY_7) MATRIX_KEY(0x00, 0x07, KEY_8) MATRIX_KEY(0x00, 0x08, KEY_9) MATRIX_KEY(0x00, 0x09, KEY_0) >; }; pwm { compatible = "st,stmpe-pwm"; #pwm-cells = <2>; }; }; port-expander@41 { compatible = "st,stmpe811"; reg = <0x41>; interrupts = <10 IRQ_TYPE_LEVEL_LOW>; interrupt-parent = <&gpio>; st,adc-freq = <1>; st,mod-12b = <1>; st,ref-sel = <0>; st,sample-time = <4>; adc { compatible = "st,stmpe-adc"; st,norequest-mask = <0x0f>; #io-channel-cells = <1>; }; gpio { compatible = "st,stmpe-gpio"; gpio-controller; #gpio-cells = <2>; interrupt-controller; #interrupt-cells = <2>; }; pwm { compatible = "st,stmpe-pwm"; #pwm-cells = <2>; }; touchscreen { compatible = "st,stmpe-ts"; st,ave-ctrl = <3>; st,touch-det-delay = <5>; st,settling = <3>; st,fraction-z = <7>; st,i-drive = <1>; }; }; }; ...