Commit e10038ce authored by Linus Walleij's avatar Linus Walleij Committed by Lee Jones
Browse files

dt-bindings: mfd: Convert STMPE to YAML schema



This converts the STMPE MFD device tree bindings to the YAML
schema.

Reference the existing schema for the ADC, just define the
other subnode schemas directly in the MFD schema.

Add two examples so we have examples covering both the simple
GPIO expander and the more complex with ADC and touchscreen.

Some in-tree users do not follow the naming conventions for nodes
so these DTS files need to be augmented to use proper node names
like "adc", "pwm", "gpio", "keyboard-controller" etc before the
bindings take effect on them.

Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
Acked-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
Reviewed-by: default avatarRob Herring <robh@kernel.org>
Link: https://lore.kernel.org/r/20230709-stmpe-dt-bindings-v5-1-34a3d6ee1e57@linaro.org


Signed-off-by: default avatarLee Jones <lee@kernel.org>
parent 2459f4df
Loading
Loading
Loading
Loading
+0 −41
Original line number Diff line number Diff line
* STMPE Keypad

Required properties:
 - compatible               : "st,stmpe-keypad"
 - linux,keymap             : See ./matrix-keymap.txt

Optional properties:
 - debounce-interval        : Debouncing interval time in milliseconds
 - st,scan-count            : Scanning cycles elapsed before key data is updated
 - st,no-autorepeat         : If specified device will not autorepeat
 - keypad,num-rows          : See ./matrix-keymap.txt
 - keypad,num-columns       : See ./matrix-keymap.txt

Example:

	stmpe_keypad {
		compatible = "st,stmpe-keypad";

		debounce-interval = <64>;
		st,scan-count = <8>;
		st,no-autorepeat;

		linux,keymap = <0x205006b
				0x4010074
				0x3050072
				0x1030004
				0x502006a
				0x500000a
				0x5008b
				0x706001c
				0x405000b
				0x6070003
				0x3040067
				0x303006c
				0x60400e7
				0x602009e
				0x4020073
				0x5050002
				0x4030069
				0x3020008>;
	};
+0 −108
Original line number Diff line number Diff line
STMPE Touchscreen
----------------

Required properties:
 - compatible: "st,stmpe-ts"

Optional properties:
- st,ave-ctrl		: Sample average control
				0 -> 1 sample
				1 -> 2 samples
				2 -> 4 samples
				3 -> 8 samples
- st,touch-det-delay	: Touch detect interrupt delay (recommended is 3)
				0 -> 10 us
				1 -> 50 us
				2 -> 100 us
				3 -> 500 us
				4 -> 1 ms
				5 -> 5 ms
				6 -> 10 ms
				7 -> 50 ms
- st,settling		: Panel driver settling time (recommended is 2)
				0 -> 10 us
				1 -> 100 us
				2 -> 500 us
				3 -> 1 ms
				4 -> 5 ms
				5 -> 10 ms
				6 -> 50 ms
				7 -> 100 ms
- st,fraction-z		: Length of the fractional part in z (recommended is 7)
			  (fraction-z ([0..7]) = Count of the fractional part)
- st,i-drive		: current limit value of the touchscreen drivers
				0 -> 20 mA (typical 35mA max)
				1 -> 50 mA (typical 80 mA max)

Optional properties common with MFD (deprecated):
 - st,sample-time	: ADC conversion time in number of clock.
				0 -> 36 clocks
				1 -> 44 clocks
				2 -> 56 clocks
				3 -> 64 clocks
				4 -> 80 clocks (recommended)
				5 -> 96 clocks
				6 -> 124 clocks
 - st,mod-12b		: ADC Bit mode
				0 -> 10bit ADC
				1 -> 12bit ADC
 - st,ref-sel		: ADC reference source
				0 -> internal
				1 -> external
 - st,adc-freq		: ADC Clock speed
				0 -> 1.625 MHz
				1 -> 3.25 MHz
				2 || 3 -> 6.5 MHz

Node should be child node of stmpe node to which it belongs.

Note that common ADC settings of stmpe_touchscreen (child) will take precedence
over the settings done in MFD.

Example:

stmpe811@41 {
	compatible = "st,stmpe811";
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_touch_int>;
	#address-cells = <1>;
	#size-cells = <0>;
	reg = <0x41>;
	interrupts = <10 IRQ_TYPE_LEVEL_LOW>;
	interrupt-parent = <&gpio4>;
	interrupt-controller;
	id = <0>;
	blocks = <0x5>;
	irq-trigger = <0x1>;
	/* Common ADC settings */
	/* 3.25 MHz ADC clock speed */
	st,adc-freq = <1>;
	/* 12-bit ADC */
	st,mod-12b = <1>;
	/* internal ADC reference */
	st,ref-sel = <0>;
	/* ADC converstion time: 80 clocks */
	st,sample-time = <4>;

	stmpe_touchscreen {
		compatible = "st,stmpe-ts";
		reg = <0>;
		/* 8 sample average control */
		st,ave-ctrl = <3>;
		/* 5 ms touch detect interrupt delay */
		st,touch-det-delay = <5>;
		/* 1 ms panel driver settling time */
		st,settling = <3>;
		/* 7 length fractional part in z */
		st,fraction-z = <7>;
		/*
		 * 50 mA typical 80 mA max touchscreen drivers
		 * current limit value
		 */
		st,i-drive = <1>;
	};
	stmpe_adc {
		compatible = "st,stmpe-adc";
		st,norequest-mask = <0x0F>;
	};
};
+297 −0
Original line number Diff line number Diff line
# 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 <linus.walleij@linaro.org>

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 <dt-bindings/gpio/gpio.h>
    #include <dt-bindings/interrupt-controller/irq.h>
    #include <dt-bindings/input/input.h>
    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>;
        };
      };
    };
...
+0 −42
Original line number Diff line number Diff line
* ST Microelectronics STMPE Multi-Functional Device

STMPE is an MFD device which may expose the following inbuilt devices: gpio,
keypad, touchscreen, adc, pwm, rotator.

Required properties:
 - compatible			: "st,stmpe[610|801|811|1600|1601|2401|2403]"
 - reg				: I2C/SPI address of the device

Optional properties:
 - interrupts			: The interrupt outputs from the controller
 - interrupt-controller		: Marks the device node as an interrupt controller
 - wakeup-source		: Marks the input device as wakable
 - st,autosleep-timeout		: Valid entries (ms); 4, 16, 32, 64, 128, 256, 512 and 1024
 - irq-gpio			: If present, which GPIO to use for event IRQ

Optional properties for devices with touch and ADC (STMPE811|STMPE610):
 - st,sample-time		: ADC conversion time in number of clock.
					0 -> 36 clocks		4 -> 80 clocks (recommended)
					1 -> 44 clocks		5 -> 96 clocks
					2 -> 56 clocks		6 -> 124 clocks
					3 -> 64 clocks
 - st,mod-12b			: ADC Bit mode
					0 -> 10bit ADC		1 -> 12bit ADC
 - st,ref-sel			: ADC reference source
					0 -> internal		1 -> external
 - st,adc-freq			: ADC Clock speed
					0 -> 1.625 MHz		2 || 3 -> 6.5 MHz
					1 -> 3.25 MHz

Example:

	stmpe1601: stmpe1601@40 {
		compatible = "st,stmpe1601";
		reg = <0x40>;
		interrupts = <26 0x4>;
		interrupt-parent = <&gpio6>;
		interrupt-controller;

		wakeup-source;
		st,autosleep-timeout = <1024>;
	};