code:
* Rohm BU21029 Touch Screen Controller

Required properties:
 - compatible              : must be "rohm,bu21029"
 - reg                     : i2c device address of the chip (0x40 or 0x41)
 - interrupt-parent        : the phandle for the gpio controller
 - interrupts              : (gpio) interrupt to which the chip is connected
 - rohm,x-plate-ohms       : x-plate resistance in Ohm

Optional properties:
 - reset-gpios             : gpio pin to reset the chip (active low)
 - touchscreen-size-x      : horizontal resolution of touchscreen (in pixels)
 - touchscreen-size-y      : vertical resolution of touchscreen (in pixels)
 - touchscreen-max-pressure: maximum pressure value
 - vdd-supply              : power supply for the controller

Example:

	&i2c1 {
		/* ... */

		bu21029: bu21029@40 {
			compatible = "rohm,bu21029";
			reg = <0x40>;
			interrupt-parent = <&gpio1>;
			interrupts = <4 IRQ_TYPE_EDGE_FALLING>;
			reset-gpios = <&gpio6 16 GPIO_ACTIVE_LOW>;
			rohm,x-plate-ohms = <600>;
			touchscreen-size-x = <800>;
			touchscreen-size-y = <480>;
			touchscreen-max-pressure = <4095>;
		};

		/* ... */
	};


code:
# SPDX-License-Identifier: GPL-2.0
%YAML 1.2
---
$id: http://devicetree.org/schemas/input/touchscreen/chipone,icn8318.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: ChipOne ICN8318 Touchscreen Controller Device Tree Bindings

maintainers:
  - Dmitry Torokhov <dmitry.torokhov@gmail.com>

allOf:
  - $ref: touchscreen.yaml#

properties:
  compatible:
    const: chipone,icn8318

  reg:
    maxItems: 1

  interrupts:
    maxItems: 1

  wake-gpios:
    maxItems: 1

unevaluatedProperties: false

required:
  - compatible
  - reg
  - interrupts
  - wake-gpios
  - touchscreen-size-x
  - touchscreen-size-y

examples:
  - |
    #include <dt-bindings/gpio/gpio.h>
    #include <dt-bindings/interrupt-controller/arm-gic.h>

    i2c {
        #address-cells = <1>;
        #size-cells = <0>;

        touchscreen@40 {
            compatible = "chipone,icn8318";
            reg = <0x40>;
            interrupt-parent = <&pio>;
            interrupts = <9 IRQ_TYPE_EDGE_FALLING>; /* EINT9 (PG9) */
            pinctrl-names = "default";
            pinctrl-0 = <&ts_wake_pin_p66>;
            wake-gpios = <&pio 1 3 GPIO_ACTIVE_HIGH>; /* PB3 */
            touchscreen-size-x = <800>;
            touchscreen-size-y = <480>;
            touchscreen-inverted-x;
            touchscreen-swapped-x-y;
        };
    };

...

repo_name: angery/linux


code:
* Toradex Colibri VF50 Touchscreen driver

Required Properties:
- compatible must be toradex,vf50-touchscreen
- io-channels: adc channels being used by the Colibri VF50 module
    IIO ADC for Y-, X-, Y+, X+ connections
- xp-gpios: FET gate driver for input of X+
- xm-gpios: FET gate driver for input of X-
- yp-gpios: FET gate driver for input of Y+
- ym-gpios: FET gate driver for input of Y-
- interrupts: pen irq interrupt for touch detection, signal from X plate
- pinctrl-names: "idle", "default"
- pinctrl-0: pinctrl node for pen/touch detection, pinctrl must provide
    pull-up resistor on X+, X-.
- pinctrl-1: pinctrl node for X/Y and pressure measurement (ADC) state pinmux
- vf50-ts-min-pressure: pressure level at which to stop measuring X/Y values

Example:

	touchctrl: vf50_touchctrl {
		compatible = "toradex,vf50-touchscreen";
		io-channels = <&adc1 0>,<&adc0 0>,
				<&adc0 1>,<&adc1 2>;
		xp-gpios = <&gpio0 13 GPIO_ACTIVE_LOW>;
		xm-gpios = <&gpio2 29 GPIO_ACTIVE_HIGH>;
		yp-gpios = <&gpio0 12 GPIO_ACTIVE_LOW>;
		ym-gpios = <&gpio0 4 GPIO_ACTIVE_HIGH>;
		interrupt-parent = <&gpio0>;
		interrupts = <8 IRQ_TYPE_LEVEL_LOW>;
		pinctrl-names = "idle","default";
		pinctrl-0 = <&pinctrl_touchctrl_idle>, <&pinctrl_touchctrl_gpios>;
		pinctrl-1 = <&pinctrl_touchctrl_default>, <&pinctrl_touchctrl_gpios>;
		vf50-ts-min-pressure = <200>;
	};


code:
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/input/touchscreen/cypress,cy8ctma140.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Cypress CY8CTMA140 series touchscreen controller bindings

maintainers:
  - Linus Walleij <linus.walleij@linaro.org>

allOf:
  - $ref: touchscreen.yaml#

properties:
  compatible:
    const: cypress,cy8ctma140

  reg:
    const: 0x20

  clock-frequency:
    description: I2C client clock frequency, defined for host
    minimum: 100000
    maximum: 400000

  interrupts:
    maxItems: 1

  vcpin-supply:
    description: Analog power supply regulator on VCPIN pin

  vdd-supply:
    description: Digital power supply regulator on VDD pin

  touchscreen-inverted-x: true
  touchscreen-inverted-y: true
  touchscreen-size-x: true
  touchscreen-size-y: true
  touchscreen-swapped-x-y: true
  touchscreen-max-pressure: true

additionalProperties: false

required:
  - compatible
  - reg
  - interrupts
  - touchscreen-size-x
  - touchscreen-size-y
  - touchscreen-max-pressure

examples:
  - |
    #include <dt-bindings/interrupt-controller/irq.h>
    i2c {
      #address-cells = <1>;
      #size-cells = <0>;
      touchscreen@20 {
        compatible = "cypress,cy8ctma140";
        reg = <0x20>;
        touchscreen-size-x = <480>;
        touchscreen-size-y = <800>;
        touchscreen-max-pressure = <255>;
        interrupt-parent = <&gpio6>;
        interrupts = <26 IRQ_TYPE_EDGE_FALLING>;
        vdd-supply = <&ab8500_ldo_aux2_reg>;
        vcpin-supply = <&ab8500_ldo_aux2_reg>;
      };
    };

...


code:
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/input/touchscreen/cypress,cy8ctma340.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Cypress CY8CTMA340 series touchscreen controller bindings

description: The Cypress CY8CTMA340 series (also known as "CYTTSP" after
  the marketing name Cypress TrueTouch Standard Product) touchscreens can
  be connected to either I2C or SPI buses.

maintainers:
  - Javier Martinez Canillas <javier@dowhile0.org>
  - Linus Walleij <linus.walleij@linaro.org>

allOf:
  - $ref: touchscreen.yaml#

properties:
  $nodename:
    pattern: "^touchscreen(@.*)?$"

  compatible:
    oneOf:
      - const: cypress,cy8ctma340
      - const: cypress,cy8ctst341
      - const: cypress,cyttsp-spi
        description: Legacy compatible for SPI connected CY8CTMA340
        deprecated: true
      - const: cypress,cyttsp-i2c
        description: Legacy compatible for I2C connected CY8CTMA340
        deprecated: true

  reg:
    description: I2C address when used on the I2C bus, or the SPI chip
      select index when used on the SPI bus

  clock-frequency:
    description: I2C client clock frequency, defined for host when using
      the device on the I2C bus
    minimum: 0
    maximum: 400000

  spi-max-frequency:
    description: SPI clock frequency, defined for host, defined when using
      the device on the SPI bus. The throughput is maximum 2 Mbps so the
      typical value is 2000000, if higher rates are used the total throughput
      needs to be restricted to 2 Mbps.
    minimum: 0
    maximum: 6000000

  interrupts:
    description: Interrupt to host
    maxItems: 1

  vcpin-supply:
    description: Analog power supply regulator on VCPIN pin

  vdd-supply:
    description: Digital power supply regulator on VDD pin

  reset-gpios:
    description: Reset line for the touchscreen, should be tagged
      as GPIO_ACTIVE_LOW

  bootloader-key:
    description: the 8-byte bootloader key that is required to switch
      the chip from bootloader mode (default mode) to application mode
    $ref: /schemas/types.yaml#/definitions/uint8-array
    minItems: 8
    maxItems: 8

  touchscreen-size-x: true
  touchscreen-size-y: true
  touchscreen-fuzz-x: true
  touchscreen-fuzz-y: true

  active-distance:
    description: the distance in pixels beyond which a touch must move
      before movement is detected and reported by the device
    $ref: /schemas/types.yaml#/definitions/uint32
    minimum: 0
    maximum: 15

  active-interval-ms:
    description: the minimum period in ms between consecutive
      scanning/processing cycles when the chip is in active mode
    minimum: 0
    maximum: 255

  lowpower-interval-ms:
    description: the minimum period in ms between consecutive
      scanning/processing cycles when the chip is in low-power mode
    minimum: 0
    maximum: 2550

  touch-timeout-ms:
    description: minimum time in ms spent in the active power state while no
      touches are detected before entering low-power mode
    minimum: 0
    maximum: 2550

  use-handshake:
    description: enable register-based handshake (boolean). This should only
      be used if the chip is configured to use 'blocking communication with
      timeout' (in this case the device generates an interrupt at the end of
      every scanning/processing cycle)
    $ref: /schemas/types.yaml#/definitions/flag

additionalProperties: false

required:
  - compatible
  - reg
  - interrupts
  - bootloader-key
  - touchscreen-size-x
  - touchscreen-size-y

examples:
  - |
    #include <dt-bindings/interrupt-controller/irq.h>
    #include <dt-bindings/gpio/gpio.h>
    spi {
      #address-cells = <1>;
      #size-cells = <0>;
      num-cs = <1>;
      cs-gpios = <&gpio 2 GPIO_ACTIVE_HIGH>;

      touchscreen@0 {
        compatible = "cypress,cy8ctma340";
        reg = <0>;
        interrupt-parent = <&gpio>;
        interrupts = <20 IRQ_TYPE_EDGE_FALLING>;
        reset-gpios = <&gpio 21 GPIO_ACTIVE_LOW>;
        vdd-supply = <&ldo_aux1_reg>;
        vcpin-supply = <&ldo_aux2_reg>;
        bootloader-key = /bits/ 8 <0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07>;
        touchscreen-size-x = <480>;
        touchscreen-size-y = <800>;
        active-interval-ms = <0>;
        touch-timeout-ms = <255>;
        lowpower-interval-ms = <10>;
      };
    };

...


code:
# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
%YAML 1.2
---
$id: http://devicetree.org/schemas/input/touchscreen/cypress,tt21000.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Cypress TT21000 touchscreen controller

description: The Cypress TT21000 series (also known as "CYTTSP5" after
  the marketing name Cypress TrueTouch Standard Product series 5).

maintainers:
  - Alistair Francis <alistair@alistair23.me>

allOf:
  - $ref: touchscreen.yaml#

properties:
  compatible:
    const: cypress,tt21000

  reg:
    maxItems: 1

  '#address-cells':
    const: 1

  '#size-cells':
    const: 0

  interrupts:
    maxItems: 1

  vdd-supply:
    description: Regulator for voltage.

  reset-gpios:
    maxItems: 1

  linux,keycodes:
    description: EV_ABS specific event code generated by the axis.

patternProperties:
  "^button@[0-9]+$":
    type: object
    $ref: ../input.yaml#
    properties:
      reg:
        maxItems: 1
      linux,keycodes:
        description: Keycode to emit

    required:
      - reg
      - linux,keycodes

    additionalProperties: false

required:
  - compatible
  - reg
  - interrupts
  - vdd-supply

unevaluatedProperties: false

examples:
  - |
    #include <dt-bindings/interrupt-controller/irq.h>
    #include <dt-bindings/gpio/gpio.h>
    #include <dt-bindings/input/linux-event-codes.h>

    i2c {
        #address-cells = <1>;
        #size-cells = <0>;

        touchscreen@24 {
            #address-cells = <1>;
            #size-cells = <0>;

            compatible = "cypress,tt21000";
            reg = <0x24>;
            pinctrl-names = "default";
            pinctrl-0 = <&tp_reset_ds203>;
            interrupt-parent = <&pio>;
            interrupts = <1 5 IRQ_TYPE_LEVEL_LOW>;
            reset-gpios = <&pio 7 1 GPIO_ACTIVE_LOW>;
            vdd-supply = <&reg_touch>;

            button@0 {
                reg = <0>;
                linux,keycodes = <KEY_HOMEPAGE>;
            };

            button@1 {
                reg = <1>;
                linux,keycodes = <KEY_MENU>;
            };

            button@2 {
                reg = <2>;
                linux,keycodes = <KEY_BACK>;
            };
        };
    };
...


code:
# SPDX-License-Identifier: GPL-2.0
%YAML 1.2
---
$id: http://devicetree.org/schemas/input/touchscreen/edt-ft5x06.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: FocalTech EDT-FT5x06 Polytouch Bindings

description: |
             There are 5 variants of the chip for various touch panel sizes
              FT5206GE1  2.8" .. 3.8"
              FT5306DE4  4.3" .. 7"
              FT5406EE8  7"   .. 8.9"
              FT5506EEG  7"   .. 8.9"
              FT5726NEI  5.7” .. 11.6"

maintainers:
  - Dmitry Torokhov <dmitry.torokhov@gmail.com>

allOf:
  - $ref: touchscreen.yaml#
  - if:
      properties:
        compatible:
          contains:
            enum:
              - evervision,ev-ft5726

    then:
      properties:
        offset-x: true
        offset-y: true

properties:
  compatible:
    enum:
      - edt,edt-ft5206
      - edt,edt-ft5306
      - edt,edt-ft5406
      - edt,edt-ft5506
      - evervision,ev-ft5726
      - focaltech,ft6236

  reg:
    maxItems: 1

  interrupts:
    maxItems: 1

  reset-gpios:
    maxItems: 1

  wake-gpios:
    maxItems: 1

  wakeup-source: true

  vcc-supply: true
  iovcc-supply: true

  gain:
    description: Allows setting the sensitivity in the range from 0 to 31.
                 Note that lower values indicate higher sensitivity.
    $ref: /schemas/types.yaml#/definitions/uint32
    minimum: 0
    maximum: 31

  offset:
    description: Allows setting the edge compensation in the range from 0 to 31.
    $ref: /schemas/types.yaml#/definitions/uint32
    minimum: 0
    maximum: 31

  offset-x:
    description: Same as offset, but applies only to the horizontal position.
                 Range from 0 to 80, only supported by evervision,ev-ft5726 devices.
    $ref: /schemas/types.yaml#/definitions/uint32
    minimum: 0
    maximum: 80

  offset-y:
    description: Same as offset, but applies only to the vertical position.
                 Range from 0 to 80, only supported by evervision,ev-ft5726 devices.
    $ref: /schemas/types.yaml#/definitions/uint32
    minimum: 0
    maximum: 80

  report-rate-hz:
    description: |
                 Allows setting the scan rate in Hertz.
                  M06 supports range from 30 to 140 Hz.
                  M12 supports range from 1 to 255 Hz.
    minimum: 1
    maximum: 255

  touchscreen-size-x: true
  touchscreen-size-y: true
  touchscreen-fuzz-x: true
  touchscreen-fuzz-y: true
  touchscreen-inverted-x: true
  touchscreen-inverted-y: true
  touchscreen-swapped-x-y: true
  interrupt-controller: true

additionalProperties: false

required:
  - compatible
  - reg
  - interrupts

examples:
  - |
    #include <dt-bindings/gpio/gpio.h>
    #include <dt-bindings/interrupt-controller/arm-gic.h>
    i2c {
      #address-cells = <1>;
      #size-cells = <0>;
      edt-ft5x06@38 {
        compatible = "edt,edt-ft5406";
        reg = <0x38>;
        interrupt-parent = <&gpio2>;
        interrupts = <5 IRQ_TYPE_EDGE_FALLING>;
        reset-gpios = <&gpio2 6 GPIO_ACTIVE_LOW>;
        wake-gpios = <&gpio4 9 GPIO_ACTIVE_HIGH>;
      };
    };

...


code:
# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/input/touchscreen/eeti,exc3000.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: EETI EXC3000 series touchscreen controller

maintainers:
  - Dmitry Torokhov <dmitry.torokhov@gmail.com>

allOf:
  - $ref: touchscreen.yaml#

properties:
  compatible:
    enum:
      - eeti,exc3000
      - eeti,exc80h60
      - eeti,exc80h84
  reg:
    const: 0x2a
  interrupts:
    maxItems: 1
  reset-gpios:
    maxItems: 1
  touchscreen-size-x: true
  touchscreen-size-y: true
  touchscreen-inverted-x: true
  touchscreen-inverted-y: true
  touchscreen-swapped-x-y: true

required:
  - compatible
  - reg
  - interrupts
  - touchscreen-size-x
  - touchscreen-size-y

additionalProperties: false

examples:
  - |
    #include "dt-bindings/interrupt-controller/irq.h"
    i2c {
        #address-cells = <1>;
        #size-cells = <0>;
        touchscreen@2a {
                compatible = "eeti,exc3000";
                reg = <0x2a>;
                interrupt-parent = <&gpio1>;
                interrupts = <9 IRQ_TYPE_LEVEL_LOW>;
                touchscreen-size-x = <4096>;
                touchscreen-size-y = <4096>;
                touchscreen-inverted-x;
                touchscreen-swapped-x-y;
        };
    };


code:
Bindings for EETI touchscreen controller

Required properties:
- compatible:	should be "eeti,exc3000-i2c"
- reg:		I2C address of the chip. Should be set to <0xa>
- interrupts:	interrupt to which the chip is connected

Optional properties:
- attn-gpios:	A handle to a GPIO to check whether interrupt is still
		latched. This is necessary for platforms that lack
		support for level-triggered IRQs.

The following optional properties described in touchscreen.txt are
also supported:

- touchscreen-inverted-x
- touchscreen-inverted-y
- touchscreen-swapped-x-y

Example:

i2c-master {
	touchscreen@a {
		compatible = "eeti,exc3000-i2c";
		reg = <0xa>;
		interrupt-parent = <&gpio>;
		interrupts = <123 IRQ_TYPE_EDGE_RISING>;
		attn-gpios = <&gpio 123 GPIO_ACTIVE_HIGH>;
	};
};


code:
* EETI eGalax Multiple Touch Controller

Required properties:
- compatible: must be "eeti,egalax_ts"
- reg: i2c slave address
- interrupts: touch controller interrupt
- wakeup-gpios: the gpio pin to be used for waking up the controller
  and also used as irq pin

Example:

	touchscreen@4 {
		compatible = "eeti,egalax_ts";
		reg = <0x04>;
		interrupt-parent = <&gpio1>;
		interrupts = <9 IRQ_TYPE_LEVEL_LOW>;
		wakeup-gpios = <&gpio1 9 GPIO_ACTIVE_LOW>;
	};


code:
* Elan eKTF2127 I2C touchscreen controller

Required properties:
 - compatible		  : "elan,ektf2127" or "elan,ektf2132"
 - reg			  : I2C slave address of the chip (0x40)
 - interrupts		  : interrupt specification for the ektf2127 interrupt
 - power-gpios		  : GPIO specification for the pin connected to the
			    ektf2127's wake input. This needs to be driven high
			    to take ektf2127 out of its low power state

For additional optional properties see: touchscreen.txt

Example:

i2c@00000000 {
	ektf2127: touchscreen@15 {
		compatible = "elan,ektf2127";
		reg = <0x15>;
		interrupt-parent = <&pio>;
		interrupts = <6 11 IRQ_TYPE_EDGE_FALLING>
		power-gpios = <&pio 1 3 GPIO_ACTIVE_HIGH>;
		touchscreen-inverted-x;
		touchscreen-swapped-x-y;
	};
};


code:
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: "http://devicetree.org/schemas/input/touchscreen/elan,elants_i2c.yaml#"
$schema: "http://devicetree.org/meta-schemas/core.yaml#"

title: Elantech I2C Touchscreen

maintainers:
  - David Heidelberg <david@ixit.cz>

allOf:
  - $ref: touchscreen.yaml#

properties:
  compatible:
    oneOf:
      - enum:
          - elan,ektf3624
          - elan,ekth3500
      - items:
          - const: elan,ekth3915
          - const: elan,ekth3500

  reg:
    maxItems: 1

  interrupts:
    maxItems: 1

  wakeup-source:
    type: boolean
    description: touchscreen can be used as a wakeup source.

  reset-gpios:
    maxItems: 1
    description: reset gpio the chip is connected to.

  vcc33-supply:
    description: a phandle for the regulator supplying 3.3V power.

  vccio-supply:
    description: a phandle for the regulator supplying IO power.

  touchscreen-inverted-x: true
  touchscreen-inverted-y: true
  touchscreen-size-x: true
  touchscreen-size-y: true
  touchscreen-swapped-x-y: true

additionalProperties: false

required:
  - compatible
  - reg
  - interrupts

examples:
  - |
    #include <dt-bindings/interrupt-controller/irq.h>

    i2c {
        #address-cells = <1>;
        #size-cells = <0>;

        touchscreen@10 {
            compatible = "elan,ekth3500";
            reg = <0x10>;

            interrupt-parent = <&gpio4>;
            interrupts = <0x0 IRQ_TYPE_EDGE_FALLING>;
            wakeup-source;
        };
    };


code:
Freescale mx25 TS conversion queue module

mx25 touchscreen conversion queue module which controls the ADC unit of the
mx25 for attached touchscreens.

Required properties:
 - compatible: Should be "fsl,imx25-tcq".
 - reg: Memory range of the device.
 - interrupts: Should be the interrupt number associated with this module within
   the tscadc unit (<0>).
 - fsl,wires: Should be '<4>' or '<5>'

Optional properties:
 - fsl,pen-debounce-ns: Pen debounce time in nanoseconds.
 - fsl,pen-threshold: Pen-down threshold for the touchscreen. This is a value
   between 1 and 4096. It is the ratio between the internal reference voltage
   and the measured voltage after the plate was precharged. Resistance between
   plates and therefore the voltage decreases with pressure so that a smaller
   value is equivalent to a higher pressure.
 - fsl,settling-time-ns: Settling time in nanoseconds. The settling time is before
   the actual touch detection to wait for an even charge distribution in the
   plate.

This device includes two conversion queues which can be added as subnodes.
The first queue is for the touchscreen, the second for general purpose ADC.

Example:
	tsc: tcq@50030400 {
		compatible = "fsl,imx25-tcq";
		reg = <0x50030400 0x60>;
		interrupt-parent = <&tscadc>;
		interrupts = <0>;
		fsl,wires = <4>;
	};


code:
# SPDX-License-Identifier: GPL-2.0
%YAML 1.2
---
$id: http://devicetree.org/schemas/input/touchscreen/goodix.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Goodix GT9xx series touchscreen controller Bindings

maintainers:
  - Dmitry Torokhov <dmitry.torokhov@gmail.com>

allOf:
  - $ref: touchscreen.yaml#

properties:
  compatible:
    enum:
      - goodix,gt1151
      - goodix,gt1158
      - goodix,gt5663
      - goodix,gt5688
      - goodix,gt911
      - goodix,gt9110
      - goodix,gt912
      - goodix,gt9147
      - goodix,gt917s
      - goodix,gt927
      - goodix,gt9271
      - goodix,gt928
      - goodix,gt9286
      - goodix,gt967

  reg:
    enum: [ 0x5d, 0x14 ]

  interrupts:
    maxItems: 1

  irq-gpios:
    description: GPIO pin used for IRQ. The driver uses the interrupt gpio pin
      as output to reset the device.
    maxItems: 1

  reset-gpios:
    maxItems: 1

  AVDD28-supply:
    description: Analog power supply regulator on AVDD28 pin

  VDDIO-supply:
    description: GPIO power supply regulator on VDDIO pin

  touchscreen-inverted-x: true
  touchscreen-inverted-y: true
  touchscreen-size-x: true
  touchscreen-size-y: true
  touchscreen-swapped-x-y: true

additionalProperties: false

required:
  - compatible
  - reg
  - interrupts

examples:
  - |
    i2c {
      #address-cells = <1>;
      #size-cells = <0>;
      gt928@5d {
        compatible = "goodix,gt928";
        reg = <0x5d>;
        interrupt-parent = <&gpio>;
        interrupts = <0 0>;
        irq-gpios = <&gpio1 0 0>;
        reset-gpios = <&gpio1 1 0>;
      };
    };

...


code:
* HiDeep Finger and Stylus touchscreen controller

Required properties:
- compatible		: must be "hideep,hideep-ts"
- reg			: I2C slave address, (e.g. 0x6C).
- interrupts : Interrupt to which the chip is connected.

Optional properties:
- vdd-supply	: It is the controller supply for controlling
					 main voltage(3.3V) through the regulator.
- vid-supply	: It is the controller supply for controlling
					IO voltage(1.8V) through the regulator.
- reset-gpios	: Define for reset gpio pin.
						It is to use for reset IC.
- touchscreen-size-x	: X axis size of touchscreen
- touchscreen-size-y	: Y axis size of touchscreen
- linux,keycodes	: Specifies an array of numeric keycode values to
			be used for reporting button presses. The array can
			contain up to 3 entries.

Example:

#include "dt-bindings/input/input.h"

i2c@00000000 {

	/* ... */

	touchscreen@6c {
		compatible = "hideep,hideep-ts";
		reg = <0x6c>;
		interrupt-parent = <&gpx1>;
		interrupts = <2 IRQ_TYPE_LEVEL_LOW>;
		vdd-supply = <&ldo15_reg>;
		vid-supply = <&ldo18_reg>;
		reset-gpios = <&gpx1 5 0>;
		touchscreen-size-x = <1080>;
		touchscreen-size-y = <1920>;
		linux,keycodes = <KEY_HOME>, <KEY_MENU>, <KEY_BACK>;
	};
};


code:
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/input/touchscreen/himax,hx83112b.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Himax hx83112b touchscreen controller bindings

maintainers:
  - Job Noorman <job@noorman.info>

allOf:
  - $ref: touchscreen.yaml#

properties:
  compatible:
    enum:
      - himax,hx83112b

  reg:
    maxItems: 1

  interrupts:
    maxItems: 1

  reset-gpios:
    maxItems: 1

  touchscreen-inverted-x: true
  touchscreen-inverted-y: true
  touchscreen-size-x: true
  touchscreen-size-y: true
  touchscreen-swapped-x-y: true

additionalProperties: false

required:
  - compatible
  - reg
  - interrupts
  - reset-gpios
  - touchscreen-size-x
  - touchscreen-size-y

examples:
  - |
    #include <dt-bindings/interrupt-controller/irq.h>
    #include <dt-bindings/gpio/gpio.h>
    i2c {
      #address-cells = <1>;
      #size-cells = <0>;
      touchscreen@48 {
        compatible = "himax,hx83112b";
        reg = <0x48>;
        interrupt-parent = <&tlmm>;
        interrupts = <65 IRQ_TYPE_LEVEL_LOW>;
        touchscreen-size-x = <1080>;
        touchscreen-size-y = <2160>;
        reset-gpios = <&tlmm 64 GPIO_ACTIVE_LOW>;
      };
    };

...


code:
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/input/touchscreen/hycon,hy46xx.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Hycon HY46XX series touchscreen controller bindings

description: |
  There are 6 variants of the chip for various touch panel sizes and cover lens material
   Glass: 0.3mm--4.0mm
    PET/PMMA: 0.2mm--2.0mm
    HY4613(B)-N048  < 6"
    HY4614(B)-N068  7" .. 10.1"
    HY4621-NS32  < 5"
    HY4623-NS48  5.1" .. 7"
   Glass: 0.3mm--8.0mm
    PET/PMMA: 0.2mm--4.0mm
    HY4633(B)-N048  < 6"
    HY4635(B)-N048  < 7" .. 10.1"

maintainers:
  - Giulio Benetti <giulio.benetti@benettiengineering.com>

allOf:
  - $ref: touchscreen.yaml#

properties:
  compatible:
    enum:
      - hycon,hy4613
      - hycon,hy4614
      - hycon,hy4621
      - hycon,hy4623
      - hycon,hy4633
      - hycon,hy4635

  reg:
    maxItems: 1

  interrupts:
    maxItems: 1

  reset-gpios:
    maxItems: 1

  vcc-supply: true

  hycon,threshold:
    description: Allows setting the sensitivity in the range from 0 to 255.
    $ref: /schemas/types.yaml#/definitions/uint32
    minimum: 0
    maximum: 255

  hycon,glove-enable:
    type: boolean
    description: Allows enabling glove setting.

  hycon,report-speed-hz:
    description: Allows setting the report speed in Hertz.
    minimum: 1
    maximum: 255

  hycon,noise-filter-enable:
    type: boolean
    description: Allows enabling power noise filter.

  hycon,filter-data:
    description: Allows setting how many samples throw before reporting touch
                 in the range from 0 to 5.
    $ref: /schemas/types.yaml#/definitions/uint32
    minimum: 0
    maximum: 5

  hycon,gain:
    description: Allows setting the sensitivity distance in the range from 0 to 5.
    $ref: /schemas/types.yaml#/definitions/uint32
    minimum: 0
    maximum: 5

  hycon,edge-offset:
    description: Allows setting the edge compensation in the range from 0 to 16.
    $ref: /schemas/types.yaml#/definitions/uint32
    minimum: 0
    maximum: 16

  touchscreen-size-x: true
  touchscreen-size-y: true
  touchscreen-fuzz-x: true
  touchscreen-fuzz-y: true
  touchscreen-inverted-x: true
  touchscreen-inverted-y: true
  touchscreen-swapped-x-y: true
  interrupt-controller: true

additionalProperties: false

required:
  - compatible
  - reg
  - interrupts

examples:
  - |
    #include <dt-bindings/gpio/gpio.h>
    #include <dt-bindings/interrupt-controller/arm-gic.h>
    i2c {
      #address-cells = <1>;
      #size-cells = <0>;
      touchscreen@1c {
        compatible = "hycon,hy4633";
        reg = <0x1c>;
        interrupt-parent = <&gpio2>;
        interrupts = <5 IRQ_TYPE_EDGE_FALLING>;
        reset-gpios = <&gpio2 6 GPIO_ACTIVE_LOW>;
      };
    };

...


code:
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/input/touchscreen/hynitron,cstxxx.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Hynitron cstxxx series touchscreen controller

description: |
  Bindings for Hynitron cstxxx series multi-touch touchscreen
  controllers.

maintainers:
  - Chris Morgan <macromorgan@hotmail.com>

allOf:
  - $ref: touchscreen.yaml#

properties:
  compatible:
    enum:
      - hynitron,cst340

  reg:
    maxItems: 1

  interrupts:
    maxItems: 1

  reset-gpios:
    maxItems: 1

  touchscreen-size-x: true
  touchscreen-size-y: true
  touchscreen-inverted-x: true
  touchscreen-inverted-y: true
  touchscreen-swapped-x-y: true

additionalProperties: false

required:
  - compatible
  - reg
  - interrupts
  - reset-gpios

examples:
  - |
    #include <dt-bindings/gpio/gpio.h>
    #include <dt-bindings/interrupt-controller/arm-gic.h>
    i2c {
      #address-cells = <1>;
      #size-cells = <0>;
      touchscreen@1a {
        compatible = "hynitron,cst340";
        reg = <0x1a>;
        interrupt-parent = <&gpio4>;
        interrupts = <9 IRQ_TYPE_EDGE_FALLING>;
        reset-gpios = <&gpio4 6 GPIO_ACTIVE_LOW>;
        touchscreen-size-x = <640>;
        touchscreen-size-y = <480>;
      };
    };

...


code:
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/input/touchscreen/ilitek_ts_i2c.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Ilitek I2C Touchscreen Controller

maintainers:
  - Dmitry Torokhov <dmitry.torokhov@gmail.com>

allOf:
  - $ref: touchscreen.yaml#

properties:
  compatible:
    enum:
      - ilitek,ili210x
      - ilitek,ili2117
      - ilitek,ili2120
      - ilitek,ili2130
      - ilitek,ili2131
      - ilitek,ili2132
      - ilitek,ili2316
      - ilitek,ili2322
      - ilitek,ili2323
      - ilitek,ili2326
      - ilitek,ili251x
      - ilitek,ili2520
      - ilitek,ili2521

  reg:
    maxItems: 1

  interrupts:
    maxItems: 1

  reset-gpios:
    maxItems: 1

  wakeup-source:
    type: boolean
    description: touchscreen can be used as a wakeup source.

  touchscreen-size-x: true
  touchscreen-size-y: true
  touchscreen-inverted-x: true
  touchscreen-inverted-y: true
  touchscreen-swapped-x-y: true

additionalProperties: false

required:
  - compatible
  - reg
  - interrupts

examples:
  - |
    #include <dt-bindings/interrupt-controller/irq.h>
    #include <dt-bindings/gpio/gpio.h>
    i2c {
        #address-cells = <1>;
        #size-cells = <0>;

        touchscreen@41 {
            compatible = "ilitek,ili2520";
            reg = <0x41>;

            interrupt-parent = <&gpio1>;
            interrupts = <7 IRQ_TYPE_LEVEL_LOW>;
            reset-gpios = <&gpio1 8 GPIO_ACTIVE_LOW>;
            touchscreen-inverted-y;
            wakeup-source;
        };
    };


code:
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/input/touchscreen/imagis,ist3038c.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Imagis IST30XXC family touchscreen controller bindings

maintainers:
  - Markuss Broks <markuss.broks@gmail.com>

allOf:
  - $ref: touchscreen.yaml#

properties:
  $nodename:
    pattern: "^touchscreen@[0-9a-f]+$"

  compatible:
    enum:
      - imagis,ist3038c

  reg:
    maxItems: 1

  interrupts:
    maxItems: 1

  vdd-supply:
    description: Power supply regulator for the chip

  vddio-supply:
    description: Power supply regulator for the I2C bus

  touchscreen-size-x: true
  touchscreen-size-y: true
  touchscreen-fuzz-x: true
  touchscreen-fuzz-y: true
  touchscreen-inverted-x: true
  touchscreen-inverted-y: true
  touchscreen-swapped-x-y: true

additionalProperties: false

required:
  - compatible
  - reg
  - interrupts
  - touchscreen-size-x
  - touchscreen-size-y

examples:
  - |
    #include <dt-bindings/interrupt-controller/irq.h>
    i2c {
      #address-cells = <1>;
      #size-cells = <0>;
      touchscreen@50 {
        compatible = "imagis,ist3038c";
        reg = <0x50>;
        interrupt-parent = <&gpio>;
        interrupts = <13 IRQ_TYPE_EDGE_FALLING>;
        vdd-supply = <&ldo1_reg>;
        vddio-supply = <&ldo2_reg>;
        touchscreen-size-x = <720>;
        touchscreen-size-y = <1280>;
        touchscreen-fuzz-x = <10>;
        touchscreen-fuzz-y = <10>;
        touchscreen-inverted-x;
        touchscreen-inverted-y;
      };
    };

...


code:
* Freescale i.MX6UL Touch Controller

Required properties:
- compatible: must be "fsl,imx6ul-tsc".
- reg: this touch controller address and the ADC2 address.
- interrupts: the interrupt of this touch controller and ADC2.
- clocks: the root clock of touch controller and ADC2.
- clock-names; must be "tsc" and "adc".
- xnur-gpio: the X- gpio this controller connect to.
  This xnur-gpio returns to low once the finger leave the touch screen (The
  last touch event the touch controller capture).

Optional properties:
- measure-delay-time: the value of measure delay time.
  Before X-axis or Y-axis measurement, the screen need some time before
  even potential distribution ready.
  This value depends on the touch screen.
- pre-charge-time: the touch screen need some time to precharge.
  This value depends on the touch screen.
- touchscreen-average-samples: Number of data samples which are averaged for
  each read. Valid values are 1, 4, 8, 16 and 32.

Example:
	tsc: tsc@2040000 {
		compatible = "fsl,imx6ul-tsc";
		reg = <0x02040000 0x4000>, <0x0219c000 0x4000>;
		interrupts = <GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>,
			     <GIC_SPI 101 IRQ_TYPE_LEVEL_HIGH>;
		clocks = <&clks IMX6UL_CLK_IPG>,
			 <&clks IMX6UL_CLK_ADC2>;
		clock-names = "tsc", "adc";
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_tsc>;
		xnur-gpio = <&gpio1 3 GPIO_ACTIVE_LOW>;
		measure-delay-time = <0xfff>;
		pre-charge-time = <0xffff>;
		touchscreen-average-samples = <32>;
	};


code:
* NXP LPC32xx SoC Touchscreen Controller (TSC)

Required properties:
- compatible: must be "nxp,lpc3220-tsc"
- reg: physical base address of the controller and length of memory mapped
  region.
- interrupts: The TSC/ADC interrupt

Example:

	tsc@40048000 {
		compatible = "nxp,lpc3220-tsc";
		reg = <0x40048000 0x1000>;
		interrupt-parent = <&mic>;
		interrupts = <39 0>;
	};


code:
* MAXI MAX11801 Resistive touch screen controller with i2c interface

Required properties:
- compatible: must be "maxim,max11801"
- reg: i2c slave address
- interrupts: touch controller interrupt

Example:

&i2c1 {
	max11801: touchscreen@48 {
		compatible = "maxim,max11801";
		reg = <0x48>;
		interrupt-parent = <&gpio3>;
		interrupts = <31 IRQ_TYPE_EDGE_FALLING>;
	};
};


code:
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/input/touchscreen/melfas,mms114.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Melfas MMS114 family touchscreen controller bindings

maintainers:
  - Linus Walleij <linus.walleij@linaro.org>

allOf:
  - $ref: touchscreen.yaml#

properties:
  $nodename:
    pattern: "^touchscreen(@.*)?$"

  compatible:
    items:
      - enum:
          - melfas,mms114
          - melfas,mms134s
          - melfas,mms136
          - melfas,mms152
          - melfas,mms345l

  reg:
    description: I2C address

  clock-frequency:
    description: I2C client clock frequency, defined for host
    minimum: 100000
    maximum: 400000

  interrupts:
    maxItems: 1

  avdd-supply:
    description: Analog power supply regulator on AVDD pin

  vdd-supply:
    description: Digital power supply regulator on VDD pin

  touchscreen-size-x: true
  touchscreen-size-y: true
  touchscreen-fuzz-x: true
  touchscreen-fuzz-y: true
  touchscreen-fuzz-pressure: true
  touchscreen-inverted-x: true
  touchscreen-inverted-y: true
  touchscreen-swapped-x-y: true
  touchscreen-max-pressure: true

additionalProperties: false

required:
  - compatible
  - reg
  - interrupts
  - touchscreen-size-x
  - touchscreen-size-y

examples:
  - |
    #include <dt-bindings/interrupt-controller/irq.h>
    i2c {
      #address-cells = <1>;
      #size-cells = <0>;
      touchscreen@48 {
        compatible = "melfas,mms114";
        reg = <0x48>;
        interrupt-parent = <&gpio>;
        interrupts = <39 IRQ_TYPE_EDGE_FALLING>;
        avdd-supply = <&ldo1_reg>;
        vdd-supply = <&ldo2_reg>;
        touchscreen-size-x = <720>;
        touchscreen-size-y = <1280>;
        touchscreen-fuzz-x = <10>;
        touchscreen-fuzz-y = <10>;
        touchscreen-fuzz-pressure = <10>;
        touchscreen-inverted-x;
        touchscreen-inverted-y;
      };
    };

...


code:
* MELFAS MIP4 Touchscreen

Required properties:
- compatible: must be "melfas,mip4_ts"
- reg: I2C slave address of the chip (0x48 or 0x34)
- interrupts: interrupt to which the chip is connected

Optional properties:
- ce-gpios: GPIO connected to the CE (chip enable) pin of the chip

Example:
	i2c@00000000 {
		touchscreen: melfas_mip4@48 {
			compatible = "melfas,mip4_ts";
			reg = <0x48>;
			interrupt-parent = <&gpio>;
			interrupts = <0 IRQ_TYPE_EDGE_FALLING>;
			ce-gpios = <&gpio 0 GPIO_ACTIVE_HIGH>;
		};
	};


code:
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/input/touchscreen/mstar,msg2638.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: MStar msg2638 touchscreen controller Bindings

maintainers:
  - Vincent Knecht <vincent.knecht@mailoo.org>

allOf:
  - $ref: touchscreen.yaml#

properties:
  compatible:
    enum:
      - mstar,msg2138
      - mstar,msg2638

  reg:
    const: 0x26

  interrupts:
    maxItems: 1

  reset-gpios:
    maxItems: 1

  vdd-supply:
    description: Power supply regulator for the chip

  vddio-supply:
    description: Power supply regulator for the I2C bus

  touchscreen-size-x: true
  touchscreen-size-y: true

  linux,keycodes:
    minItems: 1
    maxItems: 4

additionalProperties: false

required:
  - compatible
  - reg
  - interrupts
  - reset-gpios
  - touchscreen-size-x
  - touchscreen-size-y

examples:
  - |
    #include <dt-bindings/gpio/gpio.h>
    #include <dt-bindings/interrupt-controller/irq.h>
    i2c {
      #address-cells = <1>;
      #size-cells = <0>;
      touchscreen@26 {
        compatible = "mstar,msg2638";
        reg = <0x26>;
        interrupt-parent = <&msmgpio>;
        interrupts = <13 IRQ_TYPE_EDGE_FALLING>;
        reset-gpios = <&msmgpio 100 GPIO_ACTIVE_LOW>;
        pinctrl-names = "default";
        pinctrl-0 = <&ts_int_reset_default>;
        vdd-supply = <&pm8916_l17>;
        vddio-supply = <&pm8916_l5>;
        touchscreen-size-x = <2048>;
        touchscreen-size-y = <2048>;
      };
    };

...


code:
# SPDX-License-Identifier: GPL-2.0
%YAML 1.2
---
$id: http://devicetree.org/schemas/input/touchscreen/pixcir,pixcir_ts.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Pixcir Touchscreen Controller Device Tree Bindings

maintainers:
  - Dmitry Torokhov <dmitry.torokhov@gmail.com>

allOf:
  - $ref: touchscreen.yaml#

properties:
  compatible:
    enum:
      - pixcir,pixcir_ts
      - pixcir,pixcir_tangoc

  reg:
    maxItems: 1

  interrupts:
    maxItems: 1

  attb-gpio:
    maxItems: 1

  reset-gpios:
    maxItems: 1

  enable-gpios:
    maxItems: 1

  wake-gpios:
    maxItems: 1

unevaluatedProperties: false

required:
  - compatible
  - reg
  - interrupts
  - attb-gpio
  - touchscreen-size-x
  - touchscreen-size-y

examples:
  - |
    #include <dt-bindings/gpio/gpio.h>
    #include <dt-bindings/interrupt-controller/arm-gic.h>

    i2c {
        #address-cells = <1>;
        #size-cells = <0>;

        touchscreen@5c {
            compatible = "pixcir,pixcir_ts";
            reg = <0x5c>;
            interrupts = <2 0>;
            attb-gpio = <&gpf 2 0 2>;
            touchscreen-size-x = <800>;
            touchscreen-size-y = <600>;
        };
    };

...


code:
Raspberry Pi firmware based 7" touchscreen
=====================================

Required properties:
 - compatible: "raspberrypi,firmware-ts"

Optional properties:
 - firmware: Reference to RPi's firmware device node
 - touchscreen-size-x: See touchscreen.txt
 - touchscreen-size-y: See touchscreen.txt
 - touchscreen-inverted-x: See touchscreen.txt
 - touchscreen-inverted-y: See touchscreen.txt
 - touchscreen-swapped-x-y: See touchscreen.txt

Example:

firmware: firmware-rpi {
	compatible = "raspberrypi,bcm2835-firmware";
	mboxes = <&mailbox>;

	ts: touchscreen {
		compatible = "raspberrypi,firmware-ts";
		touchscreen-size-x = <800>;
		touchscreen-size-y = <480>;
	};
};


code:
# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/input/touchscreen/resistive-adc-touch.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Generic resistive touchscreen ADC

maintainers:
  - Oleksij Rempel <o.rempel@pengutronix.de>

description: |
  Generic ADC based resistive touchscreen controller
  The device must be connected to an ADC device that provides channels for
  position measurement and optional pressure.

allOf:
  - $ref: touchscreen.yaml#

properties:
  compatible:
    const: resistive-adc-touch

  io-channels:
    minItems: 2
    items:
      - description: x
      - description: y
      - description: pressure (optional)
      - description: z1 (optional)
      - description: z2 (optional)

  io-channel-names:
    oneOf:
      - items:
          - enum: [x, y]
          - enum: [x, y]
      - items:
          - enum: [x, y, pressure]
          - enum: [x, y, pressure]
          - enum: [x, y, pressure]
      - items:
          - enum: [x, y, z1, z2]
          - enum: [x, y, z1, z2]
          - enum: [x, y, z1, z2]
          - enum: [x, y, z1, z2]

  touchscreen-size-x: true
  touchscreen-size-y: true
  touchscreen-fuzz-x: true
  touchscreen-fuzz-y: true
  touchscreen-inverted-x: true
  touchscreen-inverted-y: true
  touchscreen-swapped-x-y: true
  touchscreen-min-pressure: true
  touchscreen-x-plate-ohms: true

additionalProperties: false

required:
  - compatible
  - io-channels
  - io-channel-names

examples:
  - |
    touchscreen {
      compatible = "resistive-adc-touch";
      io-channels = <&adc 24>, <&adc 25>;
      io-channel-names = "y", "x";
    };
  - |
    touchscreen {
      compatible = "resistive-adc-touch";
      touchscreen-min-pressure = <50000>;
      io-channels = <&adc 24>, <&adc 25>, <&adc 26>;
      io-channel-names = "y", "pressure", "x";
    };
  - |
    touchscreen {
      compatible = "resistive-adc-touch";
      touchscreen-min-pressure = <50000>;
      io-channels = <&adc 1>, <&adc 2>, <&adc 3>, <&adc 4>;
      io-channel-names = "x", "z1", "z2", "y";
      touchscreen-x-plate-ohms = <800>;
    };


code:
* Samsung S6SY761 touchscreen controller

Required properties:
- compatible		: must be "samsung,s6sy761"
- reg			: I2C slave address, (e.g. 0x48)
- interrupts		: interrupt specification
- avdd-supply		: analogic power supply
- vdd-supply		: power supply

Optional properties:
- touchscreen-size-x	: see touchscreen.txt. This property is embedded in the
			  device. If defined it forces a different x resolution.
- touchscreen-size-y	: see touchscreen.txt. This property is embedded in the
			  device. If defined it forces a different y resolution.

Example:

i2c@00000000 {

	/* ... */

	touchscreen@48 {
		compatible = "samsung,s6sy761";
		reg = <0x48>;
		interrupt-parent = <&gpa1>;
		interrupts = <1 IRQ_TYPE_NONE>;
		avdd-supply = <&ldo30_reg>;
		vdd-supply = <&ldo31_reg>;
		touchscreen-size-x = <4096>;
		touchscreen-size-y = <4096>;
	};
};


code:
# SPDX-License-Identifier: GPL-2.0
%YAML 1.2
---
$id: http://devicetree.org/schemas/input/touchscreen/silead,gsl1680.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Silead GSL1680 Touchscreen Controller Device Tree Bindings

maintainers:
  - Dmitry Torokhov <dmitry.torokhov@gmail.com>

allOf:
  - $ref: touchscreen.yaml#

properties:
  compatible:
    enum:
      - silead,gsl1680
      - silead,gsl1688
      - silead,gsl3670
      - silead,gsl3675
      - silead,gsl3692

  reg:
    maxItems: 1

  interrupts:
    maxItems: 1

  power-gpios:
    maxItems: 1

  firmware-name:
    $ref: /schemas/types.yaml#/definitions/string
    description: >
      File basename for board specific firmware

  silead,max-fingers:
    $ref: /schemas/types.yaml#/definitions/uint32
    maximum: 5
    description: >
      Maximum number of fingers the touchscreen can detect

  silead,home-button:
    type: boolean
    description: >
      Does the device have a capacitive home-button build into the
      touchscreen?

  avdd-supply:
    description: >
      Regulator phandle for controller AVDD

  vddio-supply:
    description: >
      Regulator phandle for controller VDDIO

unevaluatedProperties: false

required:
  - compatible
  - reg
  - interrupts
  - power-gpios
  - touchscreen-size-x
  - touchscreen-size-y

examples:
  - |
    #include <dt-bindings/gpio/gpio.h>
    #include <dt-bindings/interrupt-controller/arm-gic.h>

    i2c {
        #address-cells = <1>;
        #size-cells = <0>;

        touchscreen@40 {
            compatible = "silead,gsl1680";
            reg = <0x40>;
            interrupt-parent = <&pio>;
            interrupts = <6 11 IRQ_TYPE_EDGE_FALLING>;
            power-gpios = <&pio 1 3 GPIO_ACTIVE_HIGH>;
            touchscreen-size-x = <480>;
            touchscreen-size-y = <800>;
            touchscreen-inverted-x;
            touchscreen-swapped-x-y;
            silead,max-fingers = <5>;
        };
    };

...


code:
* SiS I2C Multiple Touch Controller

Required properties:
- compatible: must be "sis,9200-ts"
- reg: i2c slave address
- interrupts: touch controller interrupt (see interrupt
  binding [0])

Optional properties:
- pinctrl-names: should be "default" (see pinctrl binding [1]).
- pinctrl-0: a phandle pointing to the pin settings for the
  device (see pinctrl binding [1]).
- attn-gpios: the gpio pin used as attention line
- reset-gpios: the gpio pin used to reset the controller
- wakeup-source: touchscreen can be used as a wakeup source

[0]: Documentation/devicetree/bindings/interrupt-controller/interrupts.txt
[1]: Documentation/devicetree/bindings/pinctrl/pinctrl-bindings.txt

Example:

	sis9255@5c  {
		compatible = "sis,9200-ts";
		reg = <0x5c>;
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_sis>;
		interrupt-parent = <&gpio3>;
		interrupts = <19 IRQ_TYPE_EDGE_FALLING>;
		irq-gpios = <&gpio3 19 GPIO_ACTIVE_LOW>;
		reset-gpios = <&gpio2 30 GPIO_ACTIVE_LOW>;
	};


code:
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/input/touchscreen/sitronix,st1232.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Sitronix st1232 or st1633 touchscreen controller

maintainers:
  - Bastian Hecht <hechtb@gmail.com>

allOf:
  - $ref: touchscreen.yaml#

properties:
  compatible:
    enum:
      - sitronix,st1232
      - sitronix,st1633

  reg:
    maxItems: 1

  interrupts:
    maxItems: 1

  gpios:
    description: A phandle to the reset GPIO
    maxItems: 1

required:
  - compatible
  - reg
  - interrupts

unevaluatedProperties: false

examples:
  - |
    i2c {
            #address-cells = <1>;
            #size-cells = <0>;

            touchscreen@55 {
                    compatible = "sitronix,st1232";
                    reg = <0x55>;
                    interrupts = <2 0>;
                    gpios = <&gpio1 166 0>;
            };
    };


code:
* ST-Microelectronics FingerTip touchscreen controller

The ST-Microelectronics FingerTip device provides a basic touchscreen
functionality. Along with it the user can enable the touchkey which can work as
a basic HOME and BACK key for phones.

The driver supports also hovering as an absolute single touch event with x, y, z
coordinates.

Required properties:
- compatible		: must be "st,stmfts"
- reg			: I2C slave address, (e.g. 0x49)
- interrupts		: interrupt specification
- avdd-supply		: analogic power supply
- vdd-supply		: power supply
- touchscreen-size-x	: see touchscreen.txt
- touchscreen-size-y	: see touchscreen.txt

Optional properties:
- touch-key-connected	: specifies whether the touchkey feature is connected
- ledvdd-supply		: power supply to the touch key leds

Example:

i2c@00000000 {

	/* ... */

	touchscreen@49 {
		compatible = "st,stmfts";
		reg = <0x49>;
		interrupt-parent = <&gpa1>;
		interrupts = <1 IRQ_TYPE_NONE>;
		touchscreen-size-x = <1599>;
		touchscreen-size-y = <2559>;
		touch-key-connected;
		avdd-supply = <&ldo30_reg>;
		vdd-supply = <&ldo31_reg>;
		ledvdd-supply = <&ldo33_reg>;
	};
};


code:
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>;
	};
};


code:
* Semtech SX8654 I2C Touchscreen Controller

Required properties:
- compatible: must be one of the following, depending on the model:
	"semtech,sx8650"
	"semtech,sx8654"
	"semtech,sx8655"
	"semtech,sx8656"
- reg: i2c slave address
- interrupts: touch controller interrupt

Optional properties:
 - reset-gpios: GPIO specification for the NRST input

Example:

	sx8654@48 {
		compatible = "semtech,sx8654";
		reg = <0x48>;
		interrupt-parent = <&gpio6>;
		interrupts = <3 IRQ_TYPE_EDGE_FALLING>;
		reset-gpios = <&gpio4 2 GPIO_ACTIVE_LOW>;
	};


code:
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/input/touchscreen/ti,am3359-tsc.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: TI AM3359 Touchscreen controller

maintainers:
  - Miquel Raynal <miquel.raynal@bootlin.com>

properties:
  compatible:
    const: ti,am3359-tsc

  ti,wires:
    description: Wires refer to application modes i.e. 4/5/8 wire touchscreen
      support on the platform.
    $ref: /schemas/types.yaml#/definitions/uint32
    enum: [4, 5, 8]

  ti,x-plate-resistance:
    description: X plate resistance
    $ref: /schemas/types.yaml#/definitions/uint32

  ti,coordinate-readouts:
    description: The sequencer supports a total of 16 programmable steps. Each
      step is used to read a single coordinate. A single readout is enough but
      multiple reads can increase the quality. A value of 5 means, 5 reads for
      X, 5 for Y and 2 for Z (always). This utilises 12 of the 16 software steps
      available. The remaining 4 can be used by the ADC.
    $ref: /schemas/types.yaml#/definitions/uint32
    minimum: 1
    maximum: 6

  ti,wire-config:
    description: Different boards could have a different order for connecting
      wires on touchscreen. We need to provide an 8-bit number where the
      first four bits represent the analog lines and the next 4 bits represent
      positive/negative terminal on that input line. Notations to represent the
      input lines and terminals respectively are as follows, AIN0 = 0, AIN1 = 1
      and so on until AIN7 = 7. XP = 0, XN = 1, YP = 2, YN = 3.
    $ref: /schemas/types.yaml#/definitions/uint32-array
    minItems: 4
    maxItems: 8

  ti,charge-delay:
    description: Length of touch screen charge delay step in terms of ADC clock
      cycles. Charge delay value should be large in order to avoid false pen-up
      events. This value effects the overall sampling speed, hence need to be
      kept as low as possible, while avoiding false pen-up event. Start from a
      lower value, say 0x400, and increase value until false pen-up events are
      avoided. The pen-up detection happens immediately after the charge step,
      so this does in fact function as a hardware knob for adjusting the amount
      of "settling time".
    $ref: /schemas/types.yaml#/definitions/uint32

required:
  - compatible
  - ti,wires
  - ti,x-plate-resistance
  - ti,coordinate-readouts
  - ti,wire-config

additionalProperties: false

examples:
  - |
    tsc {
        compatible = "ti,am3359-tsc";
        ti,wires = <4>;
        ti,x-plate-resistance = <200>;
        ti,coordinate-readouts = <5>;
        ti,wire-config = <0x00 0x11 0x22 0x33>;
        ti,charge-delay = <0x400>;
    };


code:
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/input/touchscreen/ti,tsc2005.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Texas Instruments TSC2004 and TSC2005 touchscreen controller bindings

maintainers:
  - Marek Vasut <marex@denx.de>
  - Michael Welling <mwelling@ieee.org>

properties:
  $nodename:
    pattern: "^touchscreen(@.*)?$"

  compatible:
    enum:
      - ti,tsc2004
      - ti,tsc2005

  reg:
    maxItems: 1
    description: |
      I2C address when used on the I2C bus, or the SPI chip select index
      when used on the SPI bus

  interrupts:
    maxItems: 1

  reset-gpios:
    maxItems: 1
    description: GPIO specifier for the controller reset line

  spi-max-frequency:
    description: TSC2005 SPI bus clock frequency.
    maximum: 25000000

  ti,x-plate-ohms:
    description: resistance of the touchscreen's X plates in ohm (defaults to 280)

  ti,esd-recovery-timeout-ms:
    description: |
        if the touchscreen does not respond after the configured time
        (in milli seconds), the driver will reset it. This is disabled
        by default.

  vio-supply:
    description: Regulator specifier

  touchscreen-fuzz-pressure: true
  touchscreen-fuzz-x: true
  touchscreen-fuzz-y: true
  touchscreen-max-pressure: true
  touchscreen-size-x: true
  touchscreen-size-y: true

allOf:
  - $ref: touchscreen.yaml#
  - if:
      properties:
        compatible:
          contains:
            const: ti,tsc2004
    then:
      properties:
        spi-max-frequency: false

additionalProperties: false

required:
  - compatible
  - reg
  - interrupts

examples:
  - |
    #include <dt-bindings/interrupt-controller/irq.h>
    #include <dt-bindings/gpio/gpio.h>
    i2c {
        #address-cells = <1>;
        #size-cells = <0>;
        touchscreen@48 {
            compatible = "ti,tsc2004";
            reg = <0x48>;
            vio-supply = <&vio>;

            reset-gpios = <&gpio4 8 GPIO_ACTIVE_HIGH>;
            interrupts-extended = <&gpio1 27 IRQ_TYPE_EDGE_RISING>;

            touchscreen-fuzz-x = <4>;
            touchscreen-fuzz-y = <7>;
            touchscreen-fuzz-pressure = <2>;
            touchscreen-size-x = <4096>;
            touchscreen-size-y = <4096>;
            touchscreen-max-pressure = <2048>;

            ti,x-plate-ohms = <280>;
            ti,esd-recovery-timeout-ms = <8000>;
        };
    };
  - |
    #include <dt-bindings/interrupt-controller/irq.h>
    #include <dt-bindings/gpio/gpio.h>
    spi {
        #address-cells = <1>;
        #size-cells = <0>;
        touchscreen@0 {
            compatible = "ti,tsc2005";
            spi-max-frequency = <6000000>;
            reg = <0>;

            vio-supply = <&vio>;

            reset-gpios = <&gpio4 8 GPIO_ACTIVE_HIGH>; /* 104 */
            interrupts-extended = <&gpio4 4 IRQ_TYPE_EDGE_RISING>; /* 100 */

            touchscreen-fuzz-x = <4>;
            touchscreen-fuzz-y = <7>;
            touchscreen-fuzz-pressure = <2>;
            touchscreen-size-x = <4096>;
            touchscreen-size-y = <4096>;
            touchscreen-max-pressure = <2048>;

            ti,x-plate-ohms = <280>;
            ti,esd-recovery-timeout-ms = <8000>;
        };
    };


code:
# SPDX-License-Identifier: GPL-2.0
%YAML 1.2
---
$id: http://devicetree.org/schemas/input/touchscreen/touchscreen.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Common touchscreen Bindings

maintainers:
  - Dmitry Torokhov <dmitry.torokhov@gmail.com>

properties:
  touchscreen-min-x:
    description: minimum x coordinate reported
    $ref: /schemas/types.yaml#/definitions/uint32
    default: 0

  touchscreen-min-y:
    description: minimum y coordinate reported
    $ref: /schemas/types.yaml#/definitions/uint32
    default: 0

  touchscreen-size-x:
    description: horizontal resolution of touchscreen (maximum x coordinate reported + 1)
    $ref: /schemas/types.yaml#/definitions/uint32

  touchscreen-size-y:
    description: vertical resolution of touchscreen (maximum y coordinate reported + 1)
    $ref: /schemas/types.yaml#/definitions/uint32

  touchscreen-max-pressure:
    description: maximum reported pressure (arbitrary range dependent on the controller)
    $ref: /schemas/types.yaml#/definitions/uint32

  touchscreen-min-pressure:
    description: minimum pressure on the touchscreen to be achieved in order
      for the touchscreen driver to report a touch event.
    $ref: /schemas/types.yaml#/definitions/uint32

  touchscreen-fuzz-x:
    description: horizontal noise value of the absolute input device (in pixels)
    $ref: /schemas/types.yaml#/definitions/uint32

  touchscreen-fuzz-y:
    description: vertical noise value of the absolute input device (in pixels)
    $ref: /schemas/types.yaml#/definitions/uint32

  touchscreen-fuzz-pressure:
    description: pressure noise value of the absolute input device (arbitrary
      range dependent on the controller)
    $ref: /schemas/types.yaml#/definitions/uint32

  touchscreen-average-samples:
    description: Number of data samples which are averaged for each read (valid
      values dependent on the controller)
    $ref: /schemas/types.yaml#/definitions/uint32

  touchscreen-inverted-x:
    description: X axis is inverted
    type: boolean

  touchscreen-inverted-y:
    description: Y axis is inverted
    type: boolean

  touchscreen-swapped-x-y:
    description: X and Y axis are swapped
                 Swapping is done after inverting the axis
    type: boolean

  touchscreen-x-mm:
    description: horizontal length in mm of the touchscreen

  touchscreen-y-mm:
    description: vertical length in mm of the touchscreen

  touchscreen-x-plate-ohms:
    description: Resistance of the X-plate in Ohms

  touchscreen-y-plate-ohms:
    description: Resistance of the Y-plate in Ohms

dependencies:
  touchscreen-size-x: [ touchscreen-size-y ]
  touchscreen-size-y: [ touchscreen-size-x ]
  touchscreen-x-mm: [ touchscreen-y-mm ]
  touchscreen-y-mm: [ touchscreen-x-mm ]

additionalProperties: true


code:
* TS-4800 Touchscreen bindings

Required properties:
- compatible: must be "technologic,ts4800-ts"
- reg: physical base address of the controller and length of memory mapped
  region.
- syscon: phandle / integers array that points to the syscon node which
          describes the FPGA's syscon registers.
          - phandle to FPGA's syscon
          - offset to the touchscreen register
          - offset to the touchscreen enable bit


code:
* Texas Instruments tsc2007 touchscreen controller

Required properties:
- compatible: must be "ti,tsc2007".
- reg: I2C address of the chip.
- ti,x-plate-ohms: X-plate resistance in ohms.

Optional properties:
- gpios: the interrupt gpio the chip is connected to (trough the penirq pin).
  The penirq pin goes to low when the panel is touched.
  (see GPIO binding[1] for more details).
- interrupts: (gpio) interrupt to which the chip is connected
  (see interrupt binding[0]).
- ti,max-rt: maximum pressure.
- ti,fuzzx: specifies the absolute input fuzz x value.
  If set, it will permit noise in the data up to +- the value given to the fuzz
  parameter, that is used to filter noise from the event stream.
- ti,fuzzy: specifies the absolute input fuzz y value.
- ti,fuzzz: specifies the absolute input fuzz z value.
- ti,poll-period: how much time to wait (in milliseconds) before reading again the
  values from the tsc2007.

[0]: Documentation/devicetree/bindings/interrupt-controller/interrupts.txt
[1]: Documentation/devicetree/bindings/gpio/gpio.txt

Example:
	&i2c1 {
		/* ... */
		tsc2007@49 {
			compatible = "ti,tsc2007";
			reg = <0x49>;
			interrupt-parent = <&gpio4>;
			interrupts = <0x0 0x8>;
			gpios = <&gpio4 0 0>;
			ti,x-plate-ohms = <180>;
		};

		/* ... */
	};


code:
Zeitec ZET6223 I2C touchscreen controller

Required properties:
- compatible		  : "zeitec,zet6223"
- reg			  : I2C slave address of the chip (0x76)
- interrupts		  : interrupt specification for the zet6223 interrupt

Optional properties:

- vio-supply		  : Specification for VIO supply (1.8V or 3.3V,
			    depending on system interface needs).
- vcc-supply		  : Specification for 3.3V VCC supply.
- touchscreen-size-x	  : See touchscreen.txt
- touchscreen-size-y	  : See touchscreen.txt
- touchscreen-inverted-x  : See touchscreen.txt
- touchscreen-inverted-y  : See touchscreen.txt
- touchscreen-swapped-x-y : See touchscreen.txt

Example:

i2c@00000000 {

	zet6223: touchscreen@76 {
		compatible = "zeitec,zet6223";
		reg = <0x76>;
		interrupt-parent = <&pio>;
		interrupts = <6 11 IRQ_TYPE_EDGE_FALLING>
	};

};


code:
* Neonode infrared touchscreen controller

Required properties:
- compatible: must be "neonode,zforce"
- reg: I2C address of the chip
- interrupts: interrupt to which the chip is connected
- reset-gpios: reset gpio the chip is connected to
- x-size: horizontal resolution of touchscreen
- y-size: vertical resolution of touchscreen

Optional properties:
- irq-gpios : interrupt gpio the chip is connected to
- vdd-supply: Regulator controlling the controller supply

Example:

	i2c@00000000 {
		/* ... */

		zforce_ts@50 {
			compatible = "neonode,zforce";
			reg = <0x50>;
			interrupts = <2 0>;
			vdd-supply = <&reg_zforce_vdd>;

			reset-gpios = <&gpio5 9 0>; /* RST */
			irq-gpios = <&gpio5 6 0>; /* IRQ, optional */

			x-size = <800>;
			y-size = <600>;
		};

		/* ... */
	};


code:
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/input/touchscreen/zinitix,bt400.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Zinitix BT4xx and BT5xx series touchscreen controller bindings

description: The Zinitix BT4xx and BT5xx series of touchscreen controllers
  are Korea-produced touchscreens with embedded microcontrollers. The
  BT4xx series was produced 2010-2013 and the BT5xx series 2013-2014.

maintainers:
  - Michael Srba <Michael.Srba@seznam.cz>
  - Linus Walleij <linus.walleij@linaro.org>

allOf:
  - $ref: touchscreen.yaml#

properties:
  $nodename:
    pattern: "^touchscreen(@.*)?$"

  compatible:
    enum:
      - zinitix,bt402
      - zinitix,bt403
      - zinitix,bt404
      - zinitix,bt412
      - zinitix,bt413
      - zinitix,bt431
      - zinitix,bt432
      - zinitix,bt531
      - zinitix,bt532
      - zinitix,bt538
      - zinitix,bt541
      - zinitix,bt548
      - zinitix,bt554
      - zinitix,at100

  reg:
    description: I2C address on the I2C bus

  clock-frequency:
    description: I2C client clock frequency, defined for host when using
      the device on the I2C bus
    minimum: 0
    maximum: 400000

  interrupts:
    description: Interrupt to host
    maxItems: 1

  vcca-supply:
    description: Analog power supply regulator on the VCCA pin

  vdd-supply:
    description: Digital power supply regulator on the VDD pin.
      In older device trees this can be the accidental name for the analog
      supply on the VCCA pin, and in that case the deprecated vddo-supply is
      used for the digital power supply.

  vddo-supply:
    description: Deprecated name for the digital power supply, use vdd-supply
      as this reflects the real name of the pin. If this supply is present,
      the vdd-supply represents VCCA instead of VDD. Implementers should first
      check for this property, and if it is present assume that the vdd-supply
      represents the analog supply.
    deprecated: true

  reset-gpios:
    description: Reset line for the touchscreen, should be tagged
      as GPIO_ACTIVE_LOW

  zinitix,mode:
    description: Mode of reporting touch points. Some modes may not work
      with a particular ts firmware for unknown reasons. Available modes are
      1 and 2. Mode 2 is the default and preferred.
    $ref: /schemas/types.yaml#/definitions/uint32
    enum: [1, 2]

  touchscreen-size-x: true
  touchscreen-size-y: true
  touchscreen-fuzz-x: true
  touchscreen-fuzz-y: true

additionalProperties: false

required:
  - compatible
  - reg
  - interrupts
  - touchscreen-size-x
  - touchscreen-size-y

examples:
  - |
    #include <dt-bindings/interrupt-controller/irq.h>
    #include <dt-bindings/gpio/gpio.h>
    i2c {
      #address-cells = <1>;
      #size-cells = <0>;

      touchscreen@20 {
        compatible = "zinitix,bt541";
        reg = <0x20>;
        interrupt-parent = <&gpio>;
        interrupts = <13 IRQ_TYPE_EDGE_FALLING>;
        vcca-supply = <&reg_vcca_tsp>;
        vdd-supply = <&reg_vdd_tsp>;
        touchscreen-size-x = <540>;
        touchscreen-size-y = <960>;
        zinitix,mode = <2>;
      };
    };


code:
Texas Instruments TPS65217 and TPS65218 power button

This module is part of the TPS65217/TPS65218. For more details about the whole
TPS65217 chip see Documentation/devicetree/bindings/regulator/tps65217.txt.

This driver provides a simple power button event via an Interrupt.

Required properties:
- compatible: should be "ti,tps65217-pwrbutton" or "ti,tps65218-pwrbutton"

Required properties:
- interrupts: should be one of the following
   - <2>: For controllers compatible with tps65217
   - <3 IRQ_TYPE_EDGE_BOTH>: For controllers compatible with tps65218

Examples:

&tps {
	tps65217-pwrbutton {
		compatible = "ti,tps65217-pwrbutton";
		interrupts = <2>;
	};
};

&tps {
	power-button {
		compatible = "ti,tps65218-pwrbutton";
		interrupts = <3 IRQ_TYPE_EDGE_BOTH>;
	};
};


code:
* TWL4030's Keypad Controller device tree bindings

TWL4030's Keypad controller is used to interface a SoC with a matrix-type
keypad device. The keypad controller supports multiple row and column lines.
A key can be placed at each intersection of a unique row and a unique column.
The keypad controller can sense a key-press and key-release and report the
event using a interrupt to the cpu.

This binding is based on the matrix-keymap binding with the following
changes:

 * keypad,num-rows and keypad,num-columns are required.

Required SoC Specific Properties:
- compatible: should be one of the following
   - "ti,twl4030-keypad": For controllers compatible with twl4030 keypad
      controller.
- interrupt: should be one of the following
   - <1>: For controllers compatible with twl4030 keypad controller.

Example:
	twl_keypad: keypad {
		compatible = "ti,twl4030-keypad";
		interrupts = <1>;
		keypad,num-rows = <8>;
		keypad,num-columns = <8>;
	};


code:
Texas Instruments TWL family (twl4030) pwrbutton module

This module is part of the TWL4030. For more details about the whole
chip see Documentation/devicetree/bindings/mfd/twl-family.txt.

This module provides a simple power button event via an Interrupt.

Required properties:
- compatible: should be one of the following
   - "ti,twl4030-pwrbutton": For controllers compatible with twl4030
- interrupts: should be one of the following
   - <8>: For controllers compatible with twl4030

Example:

&twl {
	twl_pwrbutton: pwrbutton {
		compatible = "ti,twl4030-pwrbutton";
		interrupts = <8>;
	};
};


code:
Zodiac Inflight Innovations RAVE Supervisory Processor Power Button Bindings

RAVE SP input device is a "MFD cell" device corresponding to power
button functionality of RAVE Supervisory Processor. It is expected
that its Device Tree node is specified as a child of the node
corresponding to the parent RAVE SP device (as documented in
Documentation/devicetree/bindings/mfd/zii,rave-sp.txt)

Required properties:

- compatible: Should be "zii,rave-sp-pwrbutton"

Example:

	rave-sp {
		compatible = "zii,rave-sp-rdu1";
		current-speed = <38400>;

		pwrbutton {
			compatible = "zii,rave-sp-pwrbutton";
		};
	}


code:
# SPDX-License-Identifier: GPL-2.0
%YAML 1.2
---
$id: http://devicetree.org/schemas/interconnect/fsl,imx8m-noc.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Generic i.MX bus frequency device

maintainers:
  - Peng Fan <peng.fan@nxp.com>

description: |
  The i.MX SoC family has multiple buses for which clock frequency (and
  sometimes voltage) can be adjusted.

  Some of those buses expose register areas mentioned in the memory maps as GPV
  ("Global Programmers View") but not all. Access to this area might be denied
  for normal (non-secure) world.

  The buses are based on externally licensed IPs such as ARM NIC-301 and
  Arteris FlexNOC but DT bindings are specific to the integration of these bus
  interconnect IPs into imx SOCs.

properties:
  compatible:
    oneOf:
      - items:
          - enum:
              - fsl,imx8mm-nic
              - fsl,imx8mn-nic
              - fsl,imx8mp-nic
              - fsl,imx8mq-nic
          - const: fsl,imx8m-nic
      - items:
          - enum:
              - fsl,imx8mm-noc
              - fsl,imx8mn-noc
              - fsl,imx8mp-noc
              - fsl,imx8mq-noc
          - const: fsl,imx8m-noc
      - const: fsl,imx8m-nic

  reg:
    maxItems: 1

  clocks:
    maxItems: 1

  operating-points-v2: true
  opp-table:
    type: object

  fsl,ddrc:
    $ref: "/schemas/types.yaml#/definitions/phandle"
    description:
      Phandle to DDR Controller.

  '#interconnect-cells':
    description:
      If specified then also act as an interconnect provider. Should only be
      set once per soc on the main noc.
    const: 1

required:
  - compatible
  - clocks

additionalProperties: false

examples:
  - |
    #include <dt-bindings/clock/imx8mm-clock.h>
    #include <dt-bindings/interconnect/imx8mm.h>
    #include <dt-bindings/interrupt-controller/arm-gic.h>

    noc: interconnect@32700000 {
        compatible = "fsl,imx8mm-noc", "fsl,imx8m-noc";
        reg = <0x32700000 0x100000>;
        clocks = <&clk IMX8MM_CLK_NOC>;
        #interconnect-cells = <1>;
        fsl,ddrc = <&ddrc>;

        operating-points-v2 = <&noc_opp_table>;
        noc_opp_table: opp-table {
            compatible = "operating-points-v2";

            opp-133333333 {
                opp-hz = /bits/ 64 <133333333>;
            };
            opp-800000000 {
                opp-hz = /bits/ 64 <800000000>;
            };
        };
    };

    ddrc: memory-controller@3d400000 {
        compatible = "fsl,imx8mm-ddrc", "fsl,imx8m-ddrc";
        reg = <0x3d400000 0x400000>;
        clock-names = "core", "pll", "alt", "apb";
        clocks = <&clk IMX8MM_CLK_DRAM_CORE>,
                 <&clk IMX8MM_DRAM_PLL>,
                 <&clk IMX8MM_CLK_DRAM_ALT>,
                 <&clk IMX8MM_CLK_DRAM_APB>;
    };


code:
Interconnect Provider Device Tree Bindings
=========================================

The purpose of this document is to define a common set of generic interconnect
providers/consumers properties.

= interconnect providers =

The interconnect provider binding is intended to represent the interconnect
controllers in the system. Each provider registers a set of interconnect
nodes, which expose the interconnect related capabilities of the interconnect
to consumer drivers. These capabilities can be throughput, latency, priority
etc. The consumer drivers set constraints on interconnect path (or endpoints)
depending on the use case. Interconnect providers can also be interconnect
consumers, such as in the case where two network-on-chip fabrics interface
directly.

Required properties:
- compatible : contains the interconnect provider compatible string
- #interconnect-cells : number of cells in a interconnect specifier needed to
			encode the interconnect node id and optionally add a
			path tag

Example:

		snoc: interconnect@580000 {
			compatible = "qcom,msm8916-snoc";
			#interconnect-cells = <1>;
			reg = <0x580000 0x14000>;
			clock-names = "bus_clk", "bus_a_clk";
			clocks = <&rpmcc RPM_SMD_SNOC_CLK>,
				 <&rpmcc RPM_SMD_SNOC_A_CLK>;
		};

= interconnect consumers =

The interconnect consumers are device nodes which dynamically express their
bandwidth requirements along interconnect paths they are connected to. There
can be multiple interconnect providers on a SoC and the consumer may consume
multiple paths from different providers depending on use case and the
components it has to interact with.

Required properties:
interconnects : Pairs of phandles and interconnect provider specifier to denote
	        the edge source and destination ports of the interconnect path.
		An optional path tag value could specified as additional argument
		to both endpoints and in such cases, this information will be passed
		to the interconnect framework to do aggregation based on the attached
		tag.

Optional properties:
interconnect-names : List of interconnect path name strings sorted in the same
		     order as the interconnects property. Consumers drivers will use
		     interconnect-names to match interconnect paths with interconnect
		     specifier pairs.

                     Reserved interconnect names:
			 * dma-mem: Path from the device to the main memory of
			            the system

Example:

	sdhci@7864000 {
		...
		interconnects = <&pnoc MASTER_SDCC_1 &bimc SLAVE_EBI_CH0>;
		interconnect-names = "sdhc-mem";
	};

Example with path tags:

	gnoc: interconnect@17900000 {
		...
		interconnect-cells = <2>;
	};

	mnoc: interconnect@1380000 {
		...
		interconnect-cells = <2>;
	};

	cpu@0 {
		...
		interconnects = <&gnoc MASTER_APPSS_PROC 3 &mnoc SLAVE_EBI1 3>;
	}


code:
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/interconnect/mediatek,cci.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: MediaTek Cache Coherent Interconnect (CCI) frequency and voltage scaling

maintainers:
  - Jia-Wei Chang <jia-wei.chang@mediatek.com>
  - Johnson Wang <johnson.wang@mediatek.com>

description: |
  MediaTek Cache Coherent Interconnect (CCI) is a hardware engine used by
  MT8183 and MT8186 SoCs to scale the frequency and adjust the voltage in
  hardware. It can also optimize the voltage to reduce the power consumption.

properties:
  compatible:
    enum:
      - mediatek,mt8183-cci
      - mediatek,mt8186-cci

  clocks:
    items:
      - description:
          The multiplexer for clock input of the bus.
      - description:
          A parent of "bus" clock which is used as an intermediate clock source
          when the original clock source (PLL) is under transition and not
          stable yet.

  clock-names:
    items:
      - const: cci
      - const: intermediate

  operating-points-v2: true
  opp-table:
    type: object

  proc-supply:
    description:
      Phandle of the regulator for CCI that provides the supply voltage.

  sram-supply:
    description:
      Phandle of the regulator for sram of CCI that provides the supply
      voltage. When it is present, the implementation needs to do
      "voltage tracking" to step by step scale up/down Vproc and Vsram to fit
      SoC specific needs. When absent, the voltage scaling flow is handled by
      hardware, hence no software "voltage tracking" is needed.

required:
  - compatible
  - clocks
  - clock-names
  - operating-points-v2
  - proc-supply

additionalProperties: false

examples:
  - |
    #include <dt-bindings/clock/mt8183-clk.h>
    cci: cci {
        compatible = "mediatek,mt8183-cci";
        clocks = <&mcucfg CLK_MCU_BUS_SEL>,
                 <&topckgen CLK_TOP_ARMPLL_DIV_PLL1>;
        clock-names = "cci", "intermediate";
        operating-points-v2 = <&cci_opp>;
        proc-supply = <&mt6358_vproc12_reg>;
    };

    cci_opp: opp-table-cci {
        compatible = "operating-points-v2";
        opp-shared;
        opp2_00: opp-273000000 {
            opp-hz = /bits/ 64 <273000000>;
            opp-microvolt = <650000>;
        };
        opp2_01: opp-338000000 {
            opp-hz = /bits/ 64 <338000000>;
            opp-microvolt = <687500>;
        };
        opp2_02: opp-403000000 {
            opp-hz = /bits/ 64 <403000000>;
            opp-microvolt = <718750>;
        };
        opp2_03: opp-463000000 {
            opp-hz = /bits/ 64 <463000000>;
            opp-microvolt = <756250>;
        };
        opp2_04: opp-546000000 {
            opp-hz = /bits/ 64 <546000000>;
            opp-microvolt = <800000>;
        };
        opp2_05: opp-624000000 {
            opp-hz = /bits/ 64 <624000000>;
            opp-microvolt = <818750>;
        };
        opp2_06: opp-689000000 {
            opp-hz = /bits/ 64 <689000000>;
            opp-microvolt = <850000>;
        };
        opp2_07: opp-767000000 {
            opp-hz = /bits/ 64 <767000000>;
            opp-microvolt = <868750>;
        };
        opp2_08: opp-845000000 {
            opp-hz = /bits/ 64 <845000000>;
            opp-microvolt = <893750>;
        };
        opp2_09: opp-871000000 {
            opp-hz = /bits/ 64 <871000000>;
            opp-microvolt = <906250>;
        };
        opp2_10: opp-923000000 {
            opp-hz = /bits/ 64 <923000000>;
            opp-microvolt = <931250>;
        };
        opp2_11: opp-962000000 {
            opp-hz = /bits/ 64 <962000000>;
            opp-microvolt = <943750>;
        };
        opp2_12: opp-1027000000 {
            opp-hz = /bits/ 64 <1027000000>;
            opp-microvolt = <975000>;
        };
        opp2_13: opp-1092000000 {
            opp-hz = /bits/ 64 <1092000000>;
            opp-microvolt = <1000000>;
        };
        opp2_14: opp-1144000000 {
            opp-hz = /bits/ 64 <1144000000>;
            opp-microvolt = <1025000>;
        };
        opp2_15: opp-1196000000 {
            opp-hz = /bits/ 64 <1196000000>;
            opp-microvolt = <1050000>;
        };
    };


code:
# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/interconnect/qcom,bcm-voter.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Qualcomm BCM-Voter Interconnect

maintainers:
  - Georgi Djakov <georgi.djakov@linaro.org>

description: |
  The Bus Clock Manager (BCM) is a dedicated hardware accelerator that manages
  shared system resources by aggregating requests from multiple Resource State
  Coordinators (RSC). Interconnect providers are able to vote for aggregated
  thresholds values from consumers by communicating through their respective
  RSCs.

properties:
  compatible:
    enum:
      - qcom,bcm-voter

  qcom,tcs-wait:
    description: |
      Optional mask of which TCSs (Triggered Command Sets) wait for completion
      upon triggering. If not specified, then the AMC and WAKE sets wait for
      completion. The mask bits are available in the QCOM_ICC_TAG_* defines.

      The AMC TCS is triggered immediately when icc_set_bw() is called. The
      WAKE/SLEEP TCSs are triggered when the RSC transitions between active and
      sleep modes.

      In most cases, it's necessary to wait in both the AMC and WAKE sets to
      ensure resources are available before use. If a specific RSC and its use
      cases can ensure sufficient delay by other means, then this can be
      overridden to reduce latencies.

    $ref: /schemas/types.yaml#/definitions/uint32

required:
  - compatible

additionalProperties: false

examples:
  # Example 1: apps bcm_voter on SDM845 SoC should be defined inside &apps_rsc node
  # as defined in Documentation/devicetree/bindings/soc/qcom/qcom,rpmh-rsc.yaml
  - |

    apps_bcm_voter: bcm-voter {
        compatible = "qcom,bcm-voter";
    };

  # Example 2: disp bcm_voter on SDM845 should be defined inside &disp_rsc node
  # as defined in Documentation/devicetree/bindings/soc/qcom/qcom,rpmh-rsc.yaml
  - |

    #include <dt-bindings/interconnect/qcom,icc.h>

    disp_bcm_voter: bcm-voter {
        compatible = "qcom,bcm-voter";
        qcom,tcs-wait = <QCOM_ICC_TAG_AMC>;
    };
...


code:
# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/interconnect/qcom,msm8974.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Qualcomm MSM8974 Network-On-Chip Interconnect

maintainers:
  - Brian Masney <masneyb@onstation.org>

description: |
  The Qualcomm MSM8974 interconnect providers support setting system
  bandwidth requirements between various network-on-chip fabrics.

properties:
  reg:
    maxItems: 1

  compatible:
    enum:
      - qcom,msm8974-bimc
      - qcom,msm8974-cnoc
      - qcom,msm8974-mmssnoc
      - qcom,msm8974-ocmemnoc
      - qcom,msm8974-pnoc
      - qcom,msm8974-snoc

  '#interconnect-cells':
    const: 1

  clock-names:
    items:
      - const: bus
      - const: bus_a

  clocks:
    items:
      - description: Bus Clock
      - description: Bus A Clock

required:
  - compatible
  - reg
  - '#interconnect-cells'
  - clock-names
  - clocks

additionalProperties: false

examples:
  - |
      #include <dt-bindings/clock/qcom,rpmcc.h>

      bimc: interconnect@fc380000 {
              reg = <0xfc380000 0x6a000>;
              compatible = "qcom,msm8974-bimc";
              #interconnect-cells = <1>;
              clock-names = "bus", "bus_a";
              clocks = <&rpmcc RPM_SMD_BIMC_CLK>,
                       <&rpmcc RPM_SMD_BIMC_A_CLK>;
      };


code:
# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
%YAML 1.2
---
$id: http://devicetree.org/schemas/interconnect/qcom,msm8998-bwmon.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Qualcomm Interconnect Bandwidth Monitor

maintainers:
  - Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>

description: |
  Bandwidth Monitor measures current throughput on buses between various NoC
  fabrics and provides information when it crosses configured thresholds.

  Certain SoCs might have more than one Bandwidth Monitors, for example on SDM845::
   - Measuring the bandwidth between CPUs and Last Level Cache Controller -
     called just BWMON,
   - Measuring the bandwidth between Last Level Cache Controller and memory
     (DDR) - called LLCC BWMON.

properties:
  compatible:
    oneOf:
      - items:
          - enum:
              - qcom,sc7280-cpu-bwmon
              - qcom,sc8280xp-cpu-bwmon
              - qcom,sdm845-bwmon
          - const: qcom,msm8998-bwmon
      - const: qcom,msm8998-bwmon       # BWMON v4
      - items:
          - enum:
              - qcom,sc8280xp-llcc-bwmon
          - const: qcom,sc7280-llcc-bwmon
      - const: qcom,sc7280-llcc-bwmon   # BWMON v5
      - const: qcom,sdm845-llcc-bwmon   # BWMON v5

  interconnects:
    maxItems: 1

  interrupts:
    maxItems: 1

  operating-points-v2: true
  opp-table:
    type: object

  reg:
    # BWMON v4 (currently described) and BWMON v5 use one register address
    # space.  BWMON v2 uses two register spaces - not yet described.
    maxItems: 1

required:
  - compatible
  - interconnects
  - interrupts
  - operating-points-v2
  - opp-table
  - reg

additionalProperties: false

examples:
  - |
    #include <dt-bindings/interconnect/qcom,sdm845.h>
    #include <dt-bindings/interrupt-controller/arm-gic.h>

    pmu@1436400 {
        compatible = "qcom,sdm845-bwmon", "qcom,msm8998-bwmon";
        reg = <0x01436400 0x600>;
        interrupts = <GIC_SPI 581 IRQ_TYPE_LEVEL_HIGH>;
        interconnects = <&gladiator_noc MASTER_APPSS_PROC 3 &mem_noc SLAVE_LLCC 3>;

        operating-points-v2 = <&cpu_bwmon_opp_table>;

        cpu_bwmon_opp_table: opp-table {
            compatible = "operating-points-v2";
            opp-0 {
                opp-peak-kBps = <4800000>;
            };
            opp-1 {
                opp-peak-kBps = <9216000>;
            };
            opp-2 {
                opp-peak-kBps = <15052800>;
            };
            opp-3 {
                opp-peak-kBps = <20889600>;
            };
            opp-4 {
                opp-peak-kBps = <25497600>;
            };
        };
    };


code:
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/interconnect/qcom,osm-l3.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Qualcomm Operating State Manager (OSM) L3 Interconnect Provider

maintainers:
  - Sibi Sankar <quic_sibis@quicinc.com>

description:
  L3 cache bandwidth requirements on Qualcomm SoCs is serviced by the OSM.
  The OSM L3 interconnect provider aggregates the L3 bandwidth requests
  from CPU/GPU and relays it to the OSM.

properties:
  compatible:
    oneOf:
      - items:
          - enum:
              - qcom,sc7180-osm-l3
              - qcom,sc8180x-osm-l3
              - qcom,sdm845-osm-l3
              - qcom,sm8150-osm-l3
          - const: qcom,osm-l3
      - items:
          - enum:
              - qcom,sc7280-epss-l3
              - qcom,sc8280xp-epss-l3
              - qcom,sm8250-epss-l3
              - qcom,sm8350-epss-l3
          - const: qcom,epss-l3

  reg:
    maxItems: 1

  clocks:
    items:
      - description: xo clock
      - description: alternate clock

  clock-names:
    items:
      - const: xo
      - const: alternate

  '#interconnect-cells':
    const: 1

required:
  - compatible
  - reg
  - clocks
  - clock-names
  - '#interconnect-cells'

additionalProperties: false

examples:
  - |

    #define GPLL0               165
    #define RPMH_CXO_CLK        0

    osm_l3: interconnect@17d41000 {
      compatible = "qcom,sdm845-osm-l3", "qcom,osm-l3";
      reg = <0x17d41000 0x1400>;

      clocks = <&rpmhcc RPMH_CXO_CLK>, <&gcc GPLL0>;
      clock-names = "xo", "alternate";

      #interconnect-cells = <1>;
    };


code:
# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/interconnect/qcom,qcm2290.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Qualcomm QCM2290 Network-On-Chip interconnect

maintainers:
  - Shawn Guo <shawn.guo@linaro.org>

description: |
  The Qualcomm QCM2290 interconnect providers support adjusting the
  bandwidth requirements between the various NoC fabrics.

properties:
  reg:
    maxItems: 1

  compatible:
    enum:
      - qcom,qcm2290-bimc
      - qcom,qcm2290-cnoc
      - qcom,qcm2290-snoc

  '#interconnect-cells':
    const: 1

  clock-names:
    items:
      - const: bus
      - const: bus_a

  clocks:
    items:
      - description: Bus Clock
      - description: Bus A Clock

# Child node's properties
patternProperties:
  '^interconnect-[a-z0-9]+$':
    type: object
    description:
      The interconnect providers do not have a separate QoS register space,
      but share parent's space.

    properties:
      compatible:
        enum:
          - qcom,qcm2290-qup-virt
          - qcom,qcm2290-mmrt-virt
          - qcom,qcm2290-mmnrt-virt

      '#interconnect-cells':
        const: 1

      clock-names:
        items:
          - const: bus
          - const: bus_a

      clocks:
        items:
          - description: Bus Clock
          - description: Bus A Clock

    required:
      - compatible
      - '#interconnect-cells'
      - clock-names
      - clocks

    additionalProperties: false

required:
  - compatible
  - reg
  - '#interconnect-cells'
  - clock-names
  - clocks

additionalProperties: false

examples:
  - |
    #include <dt-bindings/clock/qcom,rpmcc.h>

    snoc: interconnect@1880000 {
        compatible = "qcom,qcm2290-snoc";
        reg = <0x01880000 0x60200>;
        #interconnect-cells = <1>;
        clock-names = "bus", "bus_a";
        clocks = <&rpmcc RPM_SMD_SNOC_CLK>,
                 <&rpmcc RPM_SMD_SNOC_A_CLK>;

        qup_virt: interconnect-qup {
            compatible = "qcom,qcm2290-qup-virt";
            #interconnect-cells = <1>;
            clock-names = "bus", "bus_a";
            clocks = <&rpmcc RPM_SMD_QUP_CLK>,
                     <&rpmcc RPM_SMD_QUP_A_CLK>;
        };

        mmnrt_virt: interconnect-mmnrt {
            compatible = "qcom,qcm2290-mmnrt-virt";
            #interconnect-cells = <1>;
            clock-names = "bus", "bus_a";
            clocks = <&rpmcc RPM_SMD_MMNRT_CLK>,
                     <&rpmcc RPM_SMD_MMNRT_A_CLK>;
        };

        mmrt_virt: interconnect-mmrt {
            compatible = "qcom,qcm2290-mmrt-virt";
            #interconnect-cells = <1>;
            clock-names = "bus", "bus_a";
            clocks = <&rpmcc RPM_SMD_MMRT_CLK>,
                     <&rpmcc RPM_SMD_MMRT_A_CLK>;
        };
    };

    cnoc: interconnect@1900000 {
        compatible = "qcom,qcm2290-cnoc";
        reg = <0x01900000 0x8200>;
        #interconnect-cells = <1>;
        clock-names = "bus", "bus_a";
        clocks = <&rpmcc RPM_SMD_CNOC_CLK>,
                 <&rpmcc RPM_SMD_CNOC_A_CLK>;
    };

    bimc: interconnect@4480000 {
        compatible = "qcom,qcm2290-bimc";
        reg = <0x04480000 0x80000>;
        #interconnect-cells = <1>;
        clock-names = "bus", "bus_a";
        clocks = <&rpmcc RPM_SMD_BIMC_CLK>,
                 <&rpmcc RPM_SMD_BIMC_A_CLK>;
    };


code:
# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/interconnect/qcom,rpm.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Qualcomm RPM Network-On-Chip Interconnect

maintainers:
  - Georgi Djakov <georgi.djakov@linaro.org>

description: |
  RPM interconnect providers support system bandwidth requirements through
  RPM processor. The provider is able to communicate with the RPM through
  the RPM shared memory device.

properties:
  reg:
    maxItems: 1

  compatible:
    enum:
      - qcom,msm8916-bimc
      - qcom,msm8916-pcnoc
      - qcom,msm8916-snoc
      - qcom,msm8939-bimc
      - qcom,msm8939-pcnoc
      - qcom,msm8939-snoc
      - qcom,msm8996-a0noc
      - qcom,msm8996-a1noc
      - qcom,msm8996-a2noc
      - qcom,msm8996-bimc
      - qcom,msm8996-cnoc
      - qcom,msm8996-mnoc
      - qcom,msm8996-pnoc
      - qcom,msm8996-snoc
      - qcom,qcs404-bimc
      - qcom,qcs404-pcnoc
      - qcom,qcs404-snoc
      - qcom,sdm660-a2noc
      - qcom,sdm660-bimc
      - qcom,sdm660-cnoc
      - qcom,sdm660-gnoc
      - qcom,sdm660-mnoc
      - qcom,sdm660-snoc

  '#interconnect-cells':
    description: |
      Value: <1> is one cell in an interconnect specifier for the
      interconnect node id, <2> requires the interconnect node id and an
      extra path tag.
    enum: [ 1, 2 ]

  clocks:
    minItems: 2
    maxItems: 7

  clock-names:
    minItems: 2
    maxItems: 7

  power-domains:
    maxItems: 1

required:
  - compatible
  - reg
  - '#interconnect-cells'
  - clock-names
  - clocks

additionalProperties: false

allOf:
  - if:
      properties:
        compatible:
          contains:
            enum:
              - qcom,msm8916-bimc
              - qcom,msm8916-pcnoc
              - qcom,msm8916-snoc
              - qcom,msm8939-bimc
              - qcom,msm8939-pcnoc
              - qcom,msm8939-snoc
              - qcom,msm8996-a1noc
              - qcom,msm8996-a2noc
              - qcom,msm8996-bimc
              - qcom,msm8996-cnoc
              - qcom,msm8996-pnoc
              - qcom,msm8996-snoc
              - qcom,qcs404-bimc
              - qcom,qcs404-pcnoc
              - qcom,qcs404-snoc
              - qcom,sdm660-bimc
              - qcom,sdm660-cnoc
              - qcom,sdm660-gnoc
              - qcom,sdm660-snoc

    then:
      properties:
        clock-names:
          items:
            - const: bus
            - const: bus_a

        clocks:
          items:
            - description: Bus Clock
            - description: Bus A Clock

      # Child node's properties
      patternProperties:
        '^interconnect-[a-z0-9]+$':
          type: object
          description:
            snoc-mm is a child of snoc, sharing snoc's register address space.

          properties:
            compatible:
              enum:
                - qcom,msm8939-snoc-mm

            '#interconnect-cells':
              const: 1

            clock-names:
              items:
                - const: bus
                - const: bus_a

            clocks:
              items:
                - description: Bus Clock
                - description: Bus A Clock

          required:
            - compatible
            - '#interconnect-cells'
            - clock-names
            - clocks

  - if:
      properties:
        compatible:
          contains:
            enum:
              - qcom,msm8996-mnoc
              - qcom,sdm660-mnoc

    then:
      properties:
        clock-names:
          items:
            - const: bus
            - const: bus_a
            - const: iface

        clocks:
          items:
            - description: Bus Clock.
            - description: Bus A Clock.
            - description: CPU-NoC High-performance Bus Clock.

  - if:
      properties:
        compatible:
          contains:
            enum:
              - qcom,msm8996-a0noc

    then:
      properties:
        clock-names:
          items:
            - const: aggre0_snoc_axi
            - const: aggre0_cnoc_ahb
            - const: aggre0_noc_mpu_cfg

        clocks:
          items:
            - description: Aggregate0 System NoC AXI Clock.
            - description: Aggregate0 Config NoC AHB Clock.
            - description: Aggregate0 NoC MPU Clock.

      required:
        - power-domains

  - if:
      properties:
        compatible:
          contains:
            enum:
              - qcom,sdm660-a2noc

    then:
      properties:
        clock-names:
          items:
            - const: bus
            - const: bus_a
            - const: ipa
            - const: ufs_axi
            - const: aggre2_ufs_axi
            - const: aggre2_usb3_axi
            - const: cfg_noc_usb2_axi

        clocks:
          items:
            - description: Bus Clock.
            - description: Bus A Clock.
            - description: IPA Clock.
            - description: UFS AXI Clock.
            - description: Aggregate2 UFS AXI Clock.
            - description: Aggregate2 USB3 AXI Clock.
            - description: Config NoC USB2 AXI Clock.

examples:
  - |
      #include <dt-bindings/clock/qcom,rpmcc.h>

      bimc: interconnect@400000 {
              compatible = "qcom,msm8916-bimc";
              reg = <0x00400000 0x62000>;
              #interconnect-cells = <1>;
              clock-names = "bus", "bus_a";
              clocks = <&rpmcc RPM_SMD_BIMC_CLK>,
                       <&rpmcc RPM_SMD_BIMC_A_CLK>;
      };

      pcnoc: interconnect@500000 {
              compatible = "qcom,msm8916-pcnoc";
              reg = <0x00500000 0x11000>;
              #interconnect-cells = <1>;
              clock-names = "bus", "bus_a";
              clocks = <&rpmcc RPM_SMD_PCNOC_CLK>,
                       <&rpmcc RPM_SMD_PCNOC_A_CLK>;
      };

      snoc: interconnect@580000 {
              compatible = "qcom,msm8916-snoc";
              reg = <0x00580000 0x14000>;
              #interconnect-cells = <1>;
              clock-names = "bus", "bus_a";
              clocks = <&rpmcc RPM_SMD_SNOC_CLK>,
                       <&rpmcc RPM_SMD_SNOC_A_CLK>;
      };


code:
# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/interconnect/qcom,rpmh-common.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Qualcomm RPMh Network-On-Chip Interconnect

maintainers:
  - Georgi Djakov <djakov@kernel.org>
  - Bjorn Andersson <bjorn.andersson@linaro.org>

description:
  RPMh interconnect providers support system bandwidth requirements through
  RPMh hardware accelerators known as Bus Clock Manager (BCM). The provider is
  able to communicate with the BCM through the Resource State Coordinator (RSC)
  associated with each execution environment. Provider nodes must point to at
  least one RPMh device child node pertaining to their RSC and each provider
  can map to multiple RPMh resources.

properties:
  '#interconnect-cells':
    enum: [ 1, 2 ]

  qcom,bcm-voters:
    $ref: /schemas/types.yaml#/definitions/phandle-array
    items:
      maxItems: 1
    maxItems: 2
    description:
      List of phandles to qcom,bcm-voter nodes that are required by
      this interconnect to send RPMh commands.

  qcom,bcm-voter-names:
    maxItems: 2
    description:
      Names for each of the qcom,bcm-voters specified.

required:
  - '#interconnect-cells'
  - qcom,bcm-voters

additionalProperties: true