162306a36Sopenharmony_ci# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
262306a36Sopenharmony_ci%YAML 1.2
362306a36Sopenharmony_ci---
462306a36Sopenharmony_ci$id: http://devicetree.org/schemas/mfd/st,stmpe.yaml#
562306a36Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml#
662306a36Sopenharmony_ci
762306a36Sopenharmony_cititle: STMicroelectonics Port Expander (STMPE)
862306a36Sopenharmony_ci
962306a36Sopenharmony_cidescription: STMicroelectronics Port Expander (STMPE) is a series of slow
1062306a36Sopenharmony_ci  bus controllers for various expanded peripherals such as GPIO, keypad,
1162306a36Sopenharmony_ci  touchscreen, ADC, PWM or rotator. It can contain one or several different
1262306a36Sopenharmony_ci  peripherals connected to SPI or I2C.
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_cimaintainers:
1562306a36Sopenharmony_ci  - Linus Walleij <linus.walleij@linaro.org>
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_ciallOf:
1862306a36Sopenharmony_ci  - $ref: /schemas/spi/spi-peripheral-props.yaml#
1962306a36Sopenharmony_ci
2062306a36Sopenharmony_ciproperties:
2162306a36Sopenharmony_ci  compatible:
2262306a36Sopenharmony_ci    enum:
2362306a36Sopenharmony_ci      - st,stmpe601
2462306a36Sopenharmony_ci      - st,stmpe801
2562306a36Sopenharmony_ci      - st,stmpe811
2662306a36Sopenharmony_ci      - st,stmpe1600
2762306a36Sopenharmony_ci      - st,stmpe1601
2862306a36Sopenharmony_ci      - st,stmpe2401
2962306a36Sopenharmony_ci      - st,stmpe2403
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_ci  reg:
3262306a36Sopenharmony_ci    maxItems: 1
3362306a36Sopenharmony_ci
3462306a36Sopenharmony_ci  interrupts:
3562306a36Sopenharmony_ci    maxItems: 1
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_ci  vcc-supply: true
3862306a36Sopenharmony_ci
3962306a36Sopenharmony_ci  vio-supply: true
4062306a36Sopenharmony_ci
4162306a36Sopenharmony_ci  reset-gpios:
4262306a36Sopenharmony_ci    maxItems: 1
4362306a36Sopenharmony_ci
4462306a36Sopenharmony_ci  wakeup-source: true
4562306a36Sopenharmony_ci
4662306a36Sopenharmony_ci  st,autosleep-timeout:
4762306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/uint32
4862306a36Sopenharmony_ci    enum: [ 4, 16, 32, 64, 128, 256, 512, 1024 ]
4962306a36Sopenharmony_ci    description: Time idle before going to automatic sleep to save power
5062306a36Sopenharmony_ci
5162306a36Sopenharmony_ci  st,sample-time:
5262306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/uint32
5362306a36Sopenharmony_ci    enum: [ 0, 1, 2, 3, 4, 5, 6 ]
5462306a36Sopenharmony_ci    description: |
5562306a36Sopenharmony_ci      Sample time per iteration
5662306a36Sopenharmony_ci      0 = 36 clock ticks
5762306a36Sopenharmony_ci      1 = 44 clock ticks
5862306a36Sopenharmony_ci      2 = 56 clock ticks
5962306a36Sopenharmony_ci      3 = 64 clock ticks
6062306a36Sopenharmony_ci      4 = 80 clock ticks - recommended
6162306a36Sopenharmony_ci      5 = 96 clock ticks
6262306a36Sopenharmony_ci      6 = 124 clock ticks
6362306a36Sopenharmony_ci
6462306a36Sopenharmony_ci  st,mod-12b:
6562306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/uint32
6662306a36Sopenharmony_ci    enum: [ 0, 1 ]
6762306a36Sopenharmony_ci    description: ADC bit mode 0 = 10bit ADC, 1 = 12bit ADC
6862306a36Sopenharmony_ci
6962306a36Sopenharmony_ci  st,ref-sel:
7062306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/uint32
7162306a36Sopenharmony_ci    enum: [ 0, 1 ]
7262306a36Sopenharmony_ci    description: ADC reference source 0 = internal, 1 = external
7362306a36Sopenharmony_ci
7462306a36Sopenharmony_ci  st,adc-freq:
7562306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/uint32
7662306a36Sopenharmony_ci    enum: [ 0, 1, 2, 3 ]
7762306a36Sopenharmony_ci    description: |
7862306a36Sopenharmony_ci      ADC clock speed
7962306a36Sopenharmony_ci      0 = 1.625 MHz
8062306a36Sopenharmony_ci      1 = 3.25 MHz
8162306a36Sopenharmony_ci      2, 3 = 6.5 MHz
8262306a36Sopenharmony_ci
8362306a36Sopenharmony_ci  adc:
8462306a36Sopenharmony_ci    type: object
8562306a36Sopenharmony_ci    $ref: /schemas/iio/adc/st,stmpe-adc.yaml#
8662306a36Sopenharmony_ci
8762306a36Sopenharmony_ci  gpio:
8862306a36Sopenharmony_ci    type: object
8962306a36Sopenharmony_ci    $ref: /schemas/gpio/st,stmpe-gpio.yaml#
9062306a36Sopenharmony_ci
9162306a36Sopenharmony_ci  keyboard-controller:
9262306a36Sopenharmony_ci    type: object
9362306a36Sopenharmony_ci    $ref: /schemas/input/matrix-keymap.yaml#
9462306a36Sopenharmony_ci
9562306a36Sopenharmony_ci    unevaluatedProperties: false
9662306a36Sopenharmony_ci
9762306a36Sopenharmony_ci    properties:
9862306a36Sopenharmony_ci      compatible:
9962306a36Sopenharmony_ci        const: st,stmpe-keypad
10062306a36Sopenharmony_ci
10162306a36Sopenharmony_ci      debounce-interval:
10262306a36Sopenharmony_ci        description: Debouncing interval in milliseconds
10362306a36Sopenharmony_ci        $ref: /schemas/types.yaml#/definitions/uint32
10462306a36Sopenharmony_ci
10562306a36Sopenharmony_ci      st,no-autorepeat:
10662306a36Sopenharmony_ci        description: If present, the keys will not autorepeat when pressed
10762306a36Sopenharmony_ci        $ref: /schemas/types.yaml#/definitions/flag
10862306a36Sopenharmony_ci
10962306a36Sopenharmony_ci      st,scan-count:
11062306a36Sopenharmony_ci        description: Scanning cycles elapsed before key data is updated
11162306a36Sopenharmony_ci        $ref: /schemas/types.yaml#/definitions/uint32
11262306a36Sopenharmony_ci
11362306a36Sopenharmony_ci    required:
11462306a36Sopenharmony_ci      - compatible
11562306a36Sopenharmony_ci      - linux,keymap
11662306a36Sopenharmony_ci
11762306a36Sopenharmony_ci  pwm:
11862306a36Sopenharmony_ci    type: object
11962306a36Sopenharmony_ci    $ref: /schemas/pwm/pwm.yaml#
12062306a36Sopenharmony_ci
12162306a36Sopenharmony_ci    unevaluatedProperties: false
12262306a36Sopenharmony_ci
12362306a36Sopenharmony_ci    properties:
12462306a36Sopenharmony_ci      compatible:
12562306a36Sopenharmony_ci        const: st,stmpe-pwm
12662306a36Sopenharmony_ci
12762306a36Sopenharmony_ci      "#pwm-cells":
12862306a36Sopenharmony_ci        const: 2
12962306a36Sopenharmony_ci
13062306a36Sopenharmony_ci  touchscreen:
13162306a36Sopenharmony_ci    type: object
13262306a36Sopenharmony_ci    $ref: /schemas/input/touchscreen/touchscreen.yaml#
13362306a36Sopenharmony_ci
13462306a36Sopenharmony_ci    unevaluatedProperties: false
13562306a36Sopenharmony_ci
13662306a36Sopenharmony_ci    properties:
13762306a36Sopenharmony_ci      compatible:
13862306a36Sopenharmony_ci        const: st,stmpe-ts
13962306a36Sopenharmony_ci
14062306a36Sopenharmony_ci      st,ave-ctrl:
14162306a36Sopenharmony_ci        $ref: /schemas/types.yaml#/definitions/uint32
14262306a36Sopenharmony_ci        enum: [ 0, 1, 2, 3 ]
14362306a36Sopenharmony_ci        description: |
14462306a36Sopenharmony_ci          Sample average control
14562306a36Sopenharmony_ci          0 = 1 sample
14662306a36Sopenharmony_ci          1 = 2 samples
14762306a36Sopenharmony_ci          2 = 4 samples
14862306a36Sopenharmony_ci          3 = 8 samples
14962306a36Sopenharmony_ci
15062306a36Sopenharmony_ci      st,touch-det-delay:
15162306a36Sopenharmony_ci        $ref: /schemas/types.yaml#/definitions/uint32
15262306a36Sopenharmony_ci        enum: [ 0, 1, 2, 3, 4, 5, 6, 7 ]
15362306a36Sopenharmony_ci        description: |
15462306a36Sopenharmony_ci          Touch detection delay
15562306a36Sopenharmony_ci          0 = 10 us
15662306a36Sopenharmony_ci          1 = 50 us
15762306a36Sopenharmony_ci          2 = 100 us
15862306a36Sopenharmony_ci          3 = 500 us - recommended
15962306a36Sopenharmony_ci          4 = 1 ms
16062306a36Sopenharmony_ci          5 = 5 ms
16162306a36Sopenharmony_ci          6 = 10 ms
16262306a36Sopenharmony_ci          7 = 50 ms
16362306a36Sopenharmony_ci
16462306a36Sopenharmony_ci      st,settling:
16562306a36Sopenharmony_ci        $ref: /schemas/types.yaml#/definitions/uint32
16662306a36Sopenharmony_ci        enum: [ 0, 1, 2, 3, 4, 5, 6, 7 ]
16762306a36Sopenharmony_ci        description: |
16862306a36Sopenharmony_ci          Panel driver settling time
16962306a36Sopenharmony_ci          0 = 10 us
17062306a36Sopenharmony_ci          1 = 100 us
17162306a36Sopenharmony_ci          2 = 500 us - recommended
17262306a36Sopenharmony_ci          3 = 1 ms
17362306a36Sopenharmony_ci          4 = 5 ms
17462306a36Sopenharmony_ci          5 = 10 ms
17562306a36Sopenharmony_ci          6 = 50 ms
17662306a36Sopenharmony_ci          7 = 100 ms
17762306a36Sopenharmony_ci
17862306a36Sopenharmony_ci      st,fraction-z:
17962306a36Sopenharmony_ci        $ref: /schemas/types.yaml#/definitions/uint32
18062306a36Sopenharmony_ci        enum: [ 0, 1, 2, 3, 4, 5, 6, 7 ]
18162306a36Sopenharmony_ci        description: Length of the fractional part in z, recommended is 7
18262306a36Sopenharmony_ci          (fraction-z ([0..7]) = Count of the fractional part)
18362306a36Sopenharmony_ci
18462306a36Sopenharmony_ci      st,i-drive:
18562306a36Sopenharmony_ci        $ref: /schemas/types.yaml#/definitions/uint32
18662306a36Sopenharmony_ci        enum: [ 0, 1 ]
18762306a36Sopenharmony_ci        description: |
18862306a36Sopenharmony_ci          current limit value of the touchscreen drivers
18962306a36Sopenharmony_ci          0 = 20 mA (typical 35 mA max)
19062306a36Sopenharmony_ci          1 = 50 mA (typical 80 mA max)
19162306a36Sopenharmony_ci
19262306a36Sopenharmony_ci    required:
19362306a36Sopenharmony_ci      - compatible
19462306a36Sopenharmony_ci
19562306a36Sopenharmony_ciadditionalProperties: false
19662306a36Sopenharmony_ci
19762306a36Sopenharmony_cirequired:
19862306a36Sopenharmony_ci  - compatible
19962306a36Sopenharmony_ci  - reg
20062306a36Sopenharmony_ci  - interrupts
20162306a36Sopenharmony_ci
20262306a36Sopenharmony_ciexamples:
20362306a36Sopenharmony_ci  - |
20462306a36Sopenharmony_ci    #include <dt-bindings/gpio/gpio.h>
20562306a36Sopenharmony_ci    #include <dt-bindings/interrupt-controller/irq.h>
20662306a36Sopenharmony_ci    #include <dt-bindings/input/input.h>
20762306a36Sopenharmony_ci    i2c {
20862306a36Sopenharmony_ci      #address-cells = <1>;
20962306a36Sopenharmony_ci      #size-cells = <0>;
21062306a36Sopenharmony_ci
21162306a36Sopenharmony_ci      port-expander@43 {
21262306a36Sopenharmony_ci        compatible = "st,stmpe2401";
21362306a36Sopenharmony_ci        reg = <0x43>;
21462306a36Sopenharmony_ci        reset-gpios = <&gpio 13 GPIO_ACTIVE_LOW>;
21562306a36Sopenharmony_ci        interrupts = <26 IRQ_TYPE_EDGE_FALLING>;
21662306a36Sopenharmony_ci        interrupt-parent = <&gpio>;
21762306a36Sopenharmony_ci        vcc-supply = <&db8500_vsmps2_reg>;
21862306a36Sopenharmony_ci        vio-supply = <&db8500_vsmps2_reg>;
21962306a36Sopenharmony_ci        wakeup-source;
22062306a36Sopenharmony_ci        st,autosleep-timeout = <1024>;
22162306a36Sopenharmony_ci
22262306a36Sopenharmony_ci        gpio {
22362306a36Sopenharmony_ci          compatible = "st,stmpe-gpio";
22462306a36Sopenharmony_ci          gpio-controller;
22562306a36Sopenharmony_ci          #gpio-cells = <2>;
22662306a36Sopenharmony_ci          interrupt-controller;
22762306a36Sopenharmony_ci          #interrupt-cells = <2>;
22862306a36Sopenharmony_ci          st,norequest-mask = <0xf0f002>;
22962306a36Sopenharmony_ci        };
23062306a36Sopenharmony_ci
23162306a36Sopenharmony_ci        keyboard-controller {
23262306a36Sopenharmony_ci          compatible = "st,stmpe-keypad";
23362306a36Sopenharmony_ci          debounce-interval = <64>;
23462306a36Sopenharmony_ci          st,scan-count = <8>;
23562306a36Sopenharmony_ci          st,no-autorepeat;
23662306a36Sopenharmony_ci          keypad,num-rows = <8>;
23762306a36Sopenharmony_ci          keypad,num-columns = <8>;
23862306a36Sopenharmony_ci          linux,keymap = <
23962306a36Sopenharmony_ci              MATRIX_KEY(0x00, 0x00, KEY_1)
24062306a36Sopenharmony_ci              MATRIX_KEY(0x00, 0x01, KEY_2)
24162306a36Sopenharmony_ci              MATRIX_KEY(0x00, 0x02, KEY_3)
24262306a36Sopenharmony_ci              MATRIX_KEY(0x00, 0x03, KEY_4)
24362306a36Sopenharmony_ci              MATRIX_KEY(0x00, 0x04, KEY_5)
24462306a36Sopenharmony_ci              MATRIX_KEY(0x00, 0x05, KEY_6)
24562306a36Sopenharmony_ci              MATRIX_KEY(0x00, 0x06, KEY_7)
24662306a36Sopenharmony_ci              MATRIX_KEY(0x00, 0x07, KEY_8)
24762306a36Sopenharmony_ci              MATRIX_KEY(0x00, 0x08, KEY_9)
24862306a36Sopenharmony_ci              MATRIX_KEY(0x00, 0x09, KEY_0)
24962306a36Sopenharmony_ci          >;
25062306a36Sopenharmony_ci        };
25162306a36Sopenharmony_ci
25262306a36Sopenharmony_ci        pwm {
25362306a36Sopenharmony_ci          compatible = "st,stmpe-pwm";
25462306a36Sopenharmony_ci          #pwm-cells = <2>;
25562306a36Sopenharmony_ci        };
25662306a36Sopenharmony_ci      };
25762306a36Sopenharmony_ci
25862306a36Sopenharmony_ci      port-expander@41 {
25962306a36Sopenharmony_ci        compatible = "st,stmpe811";
26062306a36Sopenharmony_ci        reg = <0x41>;
26162306a36Sopenharmony_ci        interrupts = <10 IRQ_TYPE_LEVEL_LOW>;
26262306a36Sopenharmony_ci        interrupt-parent = <&gpio>;
26362306a36Sopenharmony_ci        st,adc-freq = <1>;
26462306a36Sopenharmony_ci        st,mod-12b = <1>;
26562306a36Sopenharmony_ci        st,ref-sel = <0>;
26662306a36Sopenharmony_ci        st,sample-time = <4>;
26762306a36Sopenharmony_ci
26862306a36Sopenharmony_ci        adc {
26962306a36Sopenharmony_ci          compatible = "st,stmpe-adc";
27062306a36Sopenharmony_ci          st,norequest-mask = <0x0f>;
27162306a36Sopenharmony_ci          #io-channel-cells = <1>;
27262306a36Sopenharmony_ci        };
27362306a36Sopenharmony_ci
27462306a36Sopenharmony_ci        gpio {
27562306a36Sopenharmony_ci          compatible = "st,stmpe-gpio";
27662306a36Sopenharmony_ci          gpio-controller;
27762306a36Sopenharmony_ci          #gpio-cells = <2>;
27862306a36Sopenharmony_ci          interrupt-controller;
27962306a36Sopenharmony_ci          #interrupt-cells = <2>;
28062306a36Sopenharmony_ci        };
28162306a36Sopenharmony_ci
28262306a36Sopenharmony_ci        pwm {
28362306a36Sopenharmony_ci          compatible = "st,stmpe-pwm";
28462306a36Sopenharmony_ci          #pwm-cells = <2>;
28562306a36Sopenharmony_ci        };
28662306a36Sopenharmony_ci
28762306a36Sopenharmony_ci        touchscreen {
28862306a36Sopenharmony_ci          compatible = "st,stmpe-ts";
28962306a36Sopenharmony_ci          st,ave-ctrl = <3>;
29062306a36Sopenharmony_ci          st,touch-det-delay = <5>;
29162306a36Sopenharmony_ci          st,settling = <3>;
29262306a36Sopenharmony_ci          st,fraction-z = <7>;
29362306a36Sopenharmony_ci          st,i-drive = <1>;
29462306a36Sopenharmony_ci        };
29562306a36Sopenharmony_ci      };
29662306a36Sopenharmony_ci    };
29762306a36Sopenharmony_ci...
298