# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) %YAML 1.2 --- $id: http://devicetree.org/schemas/input/touchscreen/azoteq,iqs7211.yaml# $schema: http://devicetree.org/meta-schemas/core.yaml# title: Azoteq IQS7210A/7211A/E Trackpad/Touchscreen Controller maintainers: - Jeff LaBundy <jeff@labundy.com> description: | The Azoteq IQS7210A, IQS7211A and IQS7211E trackpad and touchscreen control- lers employ projected-capacitance sensing and can track two contacts. Link to datasheets: https://www.azoteq.com/ properties: compatible: enum: - azoteq,iqs7210a - azoteq,iqs7211a - azoteq,iqs7211e reg: maxItems: 1 irq-gpios: maxItems: 1 description: Specifies the GPIO connected to the device's active-low RDY output. The pin doubles as the IQS7211E's active-low MCLR input, in which case this GPIO must be configured as open-drain. reset-gpios: maxItems: 1 description: Specifies the GPIO connected to the device's active-low MCLR input. The device is temporarily held in hardware reset prior to initialization if this property is present. azoteq,forced-comms: type: boolean description: Enables forced communication; to be used with host adapters that cannot tolerate clock stretching. azoteq,forced-comms-default: $ref: /schemas/types.yaml#/definitions/uint32 enum: [0, 1] description: Indicates if the device's OTP memory enables (1) or disables (0) forced communication by default. Specifying this property can expedite startup time if the default value is known. If this property is not specified, communication is not initiated until the device asserts its RDY pin shortly after exiting hardware reset. At that point, forced communication is either enabled or disabled based on the presence or absence of the 'azoteq,forced-comms' property. azoteq,rate-active-ms: minimum: 0 maximum: 65535 description: Specifies the report rate (in ms) during active mode. azoteq,rate-touch-ms: minimum: 0 maximum: 65535 description: Specifies the report rate (in ms) during idle-touch mode. azoteq,rate-idle-ms: minimum: 0 maximum: 65535 description: Specifies the report rate (in ms) during idle mode. azoteq,rate-lp1-ms: minimum: 0 maximum: 65535 description: Specifies the report rate (in ms) during low-power mode 1. azoteq,rate-lp2-ms: minimum: 0 maximum: 65535 description: Specifies the report rate (in ms) during low-power mode 2. azoteq,timeout-active-ms: multipleOf: 1000 minimum: 0 maximum: 65535000 description: Specifies the length of time (in ms) to wait for an event before moving from active mode to idle or idle-touch modes. azoteq,timeout-touch-ms: multipleOf: 1000 minimum: 0 maximum: 65535000 description: Specifies the length of time (in ms) to wait for an event before moving from idle-touch mode to idle mode. azoteq,timeout-idle-ms: multipleOf: 1000 minimum: 0 maximum: 65535000 description: Specifies the length of time (in ms) to wait for an event before moving from idle mode to low-power mode 1. azoteq,timeout-lp1-ms: multipleOf: 1000 minimum: 0 maximum: 65535000 description: Specifies the length of time (in ms) to wait for an event before moving from low-power mode 1 to low-power mode 2. azoteq,timeout-lp2-ms: multipleOf: 1000 minimum: 0 maximum: 60000 description: Specifies the rate (in ms) at which the trackpad reference values are updated during low-power modes 1 and 2. azoteq,timeout-ati-ms: multipleOf: 1000 minimum: 0 maximum: 60000 description: Specifies the delay (in ms) before the automatic tuning implementation (ATI) is retried in the event it fails to complete. azoteq,timeout-comms-ms: minimum: 0 maximum: 65535 description: Specifies the delay (in ms) before a communication window is closed. azoteq,timeout-press-ms: multipleOf: 1000 minimum: 0 maximum: 60000 description: Specifies the length of time (in ms) to wait before automatically releasing a press event. Specify zero to allow the press state to persist indefinitely. azoteq,fosc-freq: $ref: /schemas/types.yaml#/definitions/uint32 enum: [0, 1] description: | Specifies the device's core clock frequency as follows: 0: 14 MHz 1: 18 MHz azoteq,fosc-trim: $ref: /schemas/types.yaml#/definitions/uint32 minimum: 0 maximum: 15 description: Specifies the device's core clock frequency trim. azoteq,num-contacts: $ref: /schemas/types.yaml#/definitions/uint32 minimum: 0 maximum: 2 default: 0 description: Specifies the number of contacts reported by the device. azoteq,contact-split: $ref: /schemas/types.yaml#/definitions/uint32 minimum: 0 maximum: 255 description: Specifies the contact (finger) split factor. azoteq,trim-x: $ref: /schemas/types.yaml#/definitions/uint32 minimum: 0 maximum: 255 description: Specifies the horizontal trim width. azoteq,trim-y: $ref: /schemas/types.yaml#/definitions/uint32 minimum: 0 maximum: 255 description: Specifies the vertical trim height. trackpad: type: object description: Represents all channels associated with the trackpad. properties: azoteq,rx-enable: $ref: /schemas/types.yaml#/definitions/uint32-array minItems: 1 maxItems: 8 items: minimum: 0 maximum: 7 description: Specifies the order of the CRx pin(s) associated with the trackpad. azoteq,tx-enable: $ref: /schemas/types.yaml#/definitions/uint32-array minItems: 1 maxItems: 12 items: minimum: 0 maximum: 11 description: Specifies the order of the CTx pin(s) associated with the trackpad. azoteq,channel-select: $ref: /schemas/types.yaml#/definitions/uint32-array minItems: 1 maxItems: 36 items: minimum: 0 maximum: 255 description: | Specifies the channels mapped to each cycle in the following order: Cycle 0, slot 0 Cycle 0, slot 1 Cycle 1, slot 0 Cycle 1, slot 1 ...and so on. Specify 255 to disable a given slot. azoteq,ati-frac-div-fine: $ref: /schemas/types.yaml#/definitions/uint32 minimum: 0 maximum: 31 description: Specifies the trackpad's ATI fine fractional divider. azoteq,ati-frac-mult-coarse: $ref: /schemas/types.yaml#/definitions/uint32 minimum: 0 maximum: 15 description: Specifies the trackpad's ATI coarse fractional multiplier. azoteq,ati-frac-div-coarse: $ref: /schemas/types.yaml#/definitions/uint32 minimum: 0 maximum: 31 description: Specifies the trackpad's ATI coarse fractional divider. azoteq,ati-comp-div: $ref: /schemas/types.yaml#/definitions/uint32 minimum: 0 maximum: 31 description: Specifies the trackpad's ATI compensation divider. azoteq,ati-target: $ref: /schemas/types.yaml#/definitions/uint32 minimum: 0 maximum: 65535 description: Specifies the trackpad's ATI target. azoteq,touch-enter: $ref: /schemas/types.yaml#/definitions/uint32 minimum: 0 maximum: 255 description: Specifies the trackpad's touch entrance factor. azoteq,touch-exit: $ref: /schemas/types.yaml#/definitions/uint32 minimum: 0 maximum: 255 description: Specifies the trackpad's touch exit factor. azoteq,thresh: $ref: /schemas/types.yaml#/definitions/uint32 minimum: 0 maximum: 255 description: Specifies the trackpad's stationary touch threshold. azoteq,conv-period: $ref: /schemas/types.yaml#/definitions/uint32 minimum: 0 maximum: 255 description: Specifies the trackpad's conversion period. azoteq,conv-frac: $ref: /schemas/types.yaml#/definitions/uint32 minimum: 0 maximum: 255 description: Specifies the trackpad's conversion frequency fraction. patternProperties: "^event-(tap(-double|-triple)?|hold|palm|swipe-(x|y)-(pos|neg)(-hold)?)$": type: object $ref: ../input.yaml# description: Represents a gesture event reported by the trackpad. In the case of axial gestures, the duration or distance specified in one direction applies to both directions along the same axis. properties: linux,code: true azoteq,gesture-max-ms: minimum: 0 maximum: 65535 description: Specifies the maximum duration of tap/swipe gestures. azoteq,gesture-mid-ms: minimum: 0 maximum: 65535 description: Specifies the maximum duration between subsequent tap gestures (IQS7211E only). azoteq,gesture-min-ms: minimum: 0 maximum: 65535 description: Specifies the minimum duration of hold gestures. azoteq,gesture-dist: $ref: /schemas/types.yaml#/definitions/uint32 minimum: 0 maximum: 65535 description: Specifies the minimum (swipe) or maximum (tap and hold) distance a finger may travel to be considered a gesture. azoteq,gesture-dist-rep: $ref: /schemas/types.yaml#/definitions/uint32 minimum: 0 maximum: 65535 description: Specifies the minimum distance a finger must travel to elicit a repeated swipe gesture (IQS7211E only). azoteq,gesture-angle: $ref: /schemas/types.yaml#/definitions/uint32 minimum: 0 maximum: 75 description: Specifies the maximum angle (in degrees) a finger may travel to be considered a swipe gesture. azoteq,thresh: $ref: /schemas/types.yaml#/definitions/uint32 minimum: 0 maximum: 42 description: Specifies the palm gesture threshold (IQS7211E only). additionalProperties: false dependencies: azoteq,rx-enable: ["azoteq,tx-enable"] azoteq,tx-enable: ["azoteq,rx-enable"] azoteq,channel-select: ["azoteq,rx-enable"] additionalProperties: false alp: type: object $ref: ../input.yaml# description: Represents the alternate low-power channel (ALP). properties: azoteq,rx-enable: $ref: /schemas/types.yaml#/definitions/uint32-array minItems: 1 maxItems: 8 items: minimum: 0 maximum: 7 description: Specifies the CRx pin(s) associated with the ALP in no particular order. azoteq,tx-enable: $ref: /schemas/types.yaml#/definitions/uint32-array minItems: 1 maxItems: 12 items: minimum: 0 maximum: 11 description: Specifies the CTx pin(s) associated with the ALP in no particular order. azoteq,ati-frac-div-fine: $ref: /schemas/types.yaml#/definitions/uint32 minimum: 0 maximum: 31 description: Specifies the ALP's ATI fine fractional divider. azoteq,ati-frac-mult-coarse: $ref: /schemas/types.yaml#/definitions/uint32 minimum: 0 maximum: 15 description: Specifies the ALP's ATI coarse fractional multiplier. azoteq,ati-frac-div-coarse: $ref: /schemas/types.yaml#/definitions/uint32 minimum: 0 maximum: 31 description: Specifies the ALP's ATI coarse fractional divider. azoteq,ati-comp-div: $ref: /schemas/types.yaml#/definitions/uint32 minimum: 0 maximum: 31 description: Specifies the ALP's ATI compensation divider. azoteq,ati-target: $ref: /schemas/types.yaml#/definitions/uint32 minimum: 0 maximum: 65535 description: Specifies the ALP's ATI target. azoteq,ati-base: $ref: /schemas/types.yaml#/definitions/uint32 multipleOf: 8 minimum: 0 maximum: 255 description: Specifies the ALP's ATI base. azoteq,ati-mode: $ref: /schemas/types.yaml#/definitions/uint32 enum: [0, 1] description: | Specifies the ALP's ATI mode as follows: 0: Partial 1: Full azoteq,sense-mode: $ref: /schemas/types.yaml#/definitions/uint32 enum: [0, 1] description: | Specifies the ALP's sensing mode as follows: 0: Self capacitive 1: Mutual capacitive azoteq,debounce-enter: $ref: /schemas/types.yaml#/definitions/uint32 minimum: 0 maximum: 255 description: Specifies the ALP's debounce entrance factor. azoteq,debounce-exit: $ref: /schemas/types.yaml#/definitions/uint32 minimum: 0 maximum: 255 description: Specifies the ALP's debounce exit factor. azoteq,thresh: $ref: /schemas/types.yaml#/definitions/uint32 minimum: 0 maximum: 65535 description: Specifies the ALP's proximity or touch threshold. azoteq,conv-period: $ref: /schemas/types.yaml#/definitions/uint32 minimum: 0 maximum: 255 description: Specifies the ALP's conversion period. azoteq,conv-frac: $ref: /schemas/types.yaml#/definitions/uint32 minimum: 0 maximum: 255 description: Specifies the ALP's conversion frequency fraction. linux,code: true additionalProperties: false button: type: object description: Represents the inductive or capacitive button. properties: azoteq,ati-frac-div-fine: $ref: /schemas/types.yaml#/definitions/uint32 minimum: 0 maximum: 31 description: Specifies the button's ATI fine fractional divider. azoteq,ati-frac-mult-coarse: $ref: /schemas/types.yaml#/definitions/uint32 minimum: 0 maximum: 15 description: Specifies the button's ATI coarse fractional multiplier. azoteq,ati-frac-div-coarse: $ref: /schemas/types.yaml#/definitions/uint32 minimum: 0 maximum: 31 description: Specifies the button's ATI coarse fractional divider. azoteq,ati-comp-div: $ref: /schemas/types.yaml#/definitions/uint32 minimum: 0 maximum: 31 description: Specifies the button's ATI compensation divider. azoteq,ati-target: $ref: /schemas/types.yaml#/definitions/uint32 minimum: 0 maximum: 65535 description: Specifies the button's ATI target. azoteq,ati-base: $ref: /schemas/types.yaml#/definitions/uint32 multipleOf: 8 minimum: 0 maximum: 255 description: Specifies the button's ATI base. azoteq,ati-mode: $ref: /schemas/types.yaml#/definitions/uint32 enum: [0, 1] description: | Specifies the button's ATI mode as follows: 0: Partial 1: Full azoteq,sense-mode: $ref: /schemas/types.yaml#/definitions/uint32 enum: [0, 1, 2] description: | Specifies the button's sensing mode as follows: 0: Self capacitive 1: Mutual capacitive 2: Inductive azoteq,touch-enter: $ref: /schemas/types.yaml#/definitions/uint32 minimum: 0 maximum: 255 description: Specifies the button's touch entrance factor. azoteq,touch-exit: $ref: /schemas/types.yaml#/definitions/uint32 minimum: 0 maximum: 255 description: Specifies the button's touch exit factor. azoteq,debounce-enter: $ref: /schemas/types.yaml#/definitions/uint32 minimum: 0 maximum: 255 description: Specifies the button's debounce entrance factor. azoteq,debounce-exit: $ref: /schemas/types.yaml#/definitions/uint32 minimum: 0 maximum: 255 description: Specifies the button's debounce exit factor. azoteq,thresh: $ref: /schemas/types.yaml#/definitions/uint32 minimum: 0 maximum: 65535 description: Specifies the button's proximity threshold. azoteq,conv-period: $ref: /schemas/types.yaml#/definitions/uint32 minimum: 0 maximum: 255 description: Specifies the button's conversion period. azoteq,conv-frac: $ref: /schemas/types.yaml#/definitions/uint32 minimum: 0 maximum: 255 description: Specifies the button's conversion frequency fraction. patternProperties: "^event-(prox|touch)$": type: object $ref: ../input.yaml# description: Represents a proximity or touch event reported by the button. properties: linux,code: true additionalProperties: false additionalProperties: false wakeup-source: true touchscreen-size-x: true touchscreen-size-y: true touchscreen-inverted-x: true touchscreen-inverted-y: true touchscreen-swapped-x-y: true dependencies: touchscreen-size-x: ["azoteq,num-contacts"] touchscreen-size-y: ["azoteq,num-contacts"] touchscreen-inverted-x: ["azoteq,num-contacts"] touchscreen-inverted-y: ["azoteq,num-contacts"] touchscreen-swapped-x-y: ["azoteq,num-contacts"] required: - compatible - reg - irq-gpios additionalProperties: false allOf: - $ref: touchscreen.yaml# - if: properties: compatible: contains: const: azoteq,iqs7210a then: properties: alp: properties: azoteq,rx-enable: maxItems: 4 items: minimum: 4 else: properties: azoteq,timeout-press-ms: false alp: properties: azoteq,ati-mode: false button: false - if: properties: compatible: contains: const: azoteq,iqs7211e then: properties: reset-gpios: false trackpad: properties: azoteq,tx-enable: maxItems: 13 items: maximum: 12 alp: properties: azoteq,tx-enable: maxItems: 13 items: maximum: 12 examples: - | #include <dt-bindings/gpio/gpio.h> #include <dt-bindings/input/input.h> i2c { #address-cells = <1>; #size-cells = <0>; touch@56 { compatible = "azoteq,iqs7210a"; reg = <0x56>; irq-gpios = <&gpio 4 GPIO_ACTIVE_LOW>; reset-gpios = <&gpio 17 (GPIO_ACTIVE_LOW | GPIO_PUSH_PULL)>; azoteq,num-contacts = <2>; trackpad { azoteq,rx-enable = <6>, <5>, <4>, <3>, <2>; azoteq,tx-enable = <1>, <7>, <8>, <9>, <10>; }; button { azoteq,sense-mode = <2>; azoteq,touch-enter = <40>; azoteq,touch-exit = <36>; event-touch { linux,code = <KEY_HOME>; }; }; alp { azoteq,sense-mode = <1>; linux,code = <KEY_POWER>; }; }; }; - | #include <dt-bindings/gpio/gpio.h> #include <dt-bindings/input/input.h> i2c { #address-cells = <1>; #size-cells = <0>; touch@56 { compatible = "azoteq,iqs7211e"; reg = <0x56>; irq-gpios = <&gpio 4 (GPIO_ACTIVE_LOW | GPIO_OPEN_DRAIN)>; trackpad { event-tap { linux,code = <KEY_PLAYPAUSE>; }; event-tap-double { linux,code = <KEY_SHUFFLE>; }; event-tap-triple { linux,code = <KEY_AGAIN>; }; event-hold { linux,code = <KEY_STOP>; }; event-palm { linux,code = <KEY_EXIT>; }; event-swipe-x-pos { linux,code = <KEY_REWIND>; }; event-swipe-x-pos-hold { linux,code = <KEY_PREVIOUS>; }; event-swipe-x-neg { linux,code = <KEY_FASTFORWARD>; }; event-swipe-x-neg-hold { linux,code = <KEY_NEXT>; }; event-swipe-y-pos { linux,code = <KEY_VOLUMEUP>; }; event-swipe-y-pos-hold { linux,code = <KEY_MUTE>; }; event-swipe-y-neg { linux,code = <KEY_VOLUMEDOWN>; }; event-swipe-y-neg-hold { linux,code = <KEY_MUTE>; }; }; }; }; ...