# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) %YAML 1.2 --- $id: http://devicetree.org/schemas/input/iqs626a.yaml# $schema: http://devicetree.org/meta-schemas/core.yaml# title: Azoteq IQS626A Capacitive Touch Controller maintainers: - Jeff LaBundy <jeff@labundy.com> description: | The Azoteq IQS626A is a 14-channel capacitive touch controller that features additional Hall-effect and inductive sensing capabilities. Link to datasheet: https://www.azoteq.com/ allOf: - $ref: touchscreen/touchscreen.yaml# properties: compatible: const: azoteq,iqs626a reg: maxItems: 1 interrupts: maxItems: 1 "#address-cells": const: 1 "#size-cells": const: 0 azoteq,suspend-mode: $ref: /schemas/types.yaml#/definitions/uint32 enum: [0, 1, 2, 3] default: 0 description: | Specifies the power mode during suspend as follows: 0: Automatic (same as normal runtime, i.e. suspend/resume disabled) 1: Low power (all sensing at a reduced reporting rate) 2: Ultra-low power (ULP channel proximity sensing) 3: Halt (no sensing) azoteq,clk-div: type: boolean description: Divides the device's core clock by a factor of 4. azoteq,ulp-enable: type: boolean description: Permits the device to automatically enter ultra-low-power mode from low- power mode. azoteq,ulp-update: $ref: /schemas/types.yaml#/definitions/uint32 enum: [0, 1, 2, 3, 4, 5, 6, 7] default: 3 description: | Specifies the rate at which the trackpad, generic and Hall channels are updated during ultra-low-power mode as follows: 0: 8 1: 13 2: 28 3: 54 4: 89 5: 135 6: 190 7: 256 azoteq,ati-band-disable: type: boolean description: Disables the ATI band check. azoteq,ati-lp-only: type: boolean description: Limits automatic ATI to low-power mode. azoteq,gpio3-select: $ref: /schemas/types.yaml#/definitions/uint32 enum: [0, 1, 2, 3, 4, 5, 6, 7] default: 1 description: | Selects the channel or group of channels for which the GPIO3 pin represents touch state as follows: 0: None 1: ULP channel 2: Trackpad 3: Trackpad 4: Generic channel 0 5: Generic channel 1 6: Generic channel 2 7: Hall channel azoteq,reseed-select: $ref: /schemas/types.yaml#/definitions/uint32 enum: [0, 1, 2, 3] default: 0 description: | Specifies the event(s) that prompt the device to reseed (i.e. reset the long-term average) of an associated channel as follows: 0: None 1: Proximity 2: Proximity or touch 3: Proximity, touch or deep touch azoteq,thresh-extend: type: boolean description: Multiplies all touch and deep-touch thresholds by 4. azoteq,tracking-enable: type: boolean description: Enables all associated channels to track their respective reference channels. azoteq,reseed-offset: type: boolean description: Applies an 8-count offset to all long-term averages upon either ATI or reseed events. azoteq,rate-np-ms: minimum: 0 maximum: 255 default: 150 description: Specifies the report rate (in ms) during normal-power mode. azoteq,rate-lp-ms: minimum: 0 maximum: 255 default: 150 description: Specifies the report rate (in ms) during low-power mode. azoteq,rate-ulp-ms: multipleOf: 16 minimum: 0 maximum: 4080 default: 0 description: Specifies the report rate (in ms) during ultra-low-power mode. azoteq,timeout-pwr-ms: multipleOf: 512 minimum: 0 maximum: 130560 default: 2560 description: Specifies the length of time (in ms) to wait for an event before moving from normal-power mode to low-power mode, or (if 'azoteq,ulp-enable' is present) from low-power mode to ultra-low-power mode. azoteq,timeout-lta-ms: multipleOf: 512 minimum: 0 maximum: 130560 default: 40960 description: Specifies the length of time (in ms) to wait before resetting the long- term average of all channels. Specify the maximum timeout to disable it altogether. touchscreen-inverted-x: true touchscreen-inverted-y: true touchscreen-swapped-x-y: true patternProperties: "^ulp-0|generic-[0-2]|hall$": type: object description: Represents a single sensing channel. A channel is active if defined and inactive otherwise. properties: azoteq,ati-exclude: type: boolean description: Prevents the channel from participating in an ATI event that is manually triggered during initialization. azoteq,reseed-disable: type: boolean description: Prevents the channel from being reseeded if the long-term average timeout (defined in 'azoteq,timeout-lta') expires. azoteq,meas-cap-decrease: type: boolean description: Decreases the internal measurement capacitance from 60 pF to 15 pF. azoteq,rx-inactive: $ref: /schemas/types.yaml#/definitions/uint32 enum: [0, 1, 2] default: 0 description: | Specifies how inactive CRX pins are to be terminated as follows: 0: VSS 1: Floating 2: VREG (generic channels only) azoteq,linearize: type: boolean description: Enables linearization of the channel's counts (generic and Hall channels) or inverts the polarity of the channel's proximity or touch states (ULP channel). azoteq,dual-direction: type: boolean description: Specifies that the channel's long-term average is to freeze in the presence of either increasing or decreasing counts, thereby permit- ting events to be reported in either direction. azoteq,filt-disable: type: boolean description: Disables raw count filtering for the channel. azoteq,ati-mode: $ref: /schemas/types.yaml#/definitions/uint32 enum: [0, 1, 2, 3] description: | Specifies the channel's ATI mode as follows: 0: Disabled 1: Semi-partial 2: Partial 3: Full The default value is a function of the channel and the device's reset user interface (RUI); reference the datasheet for further information about the available RUI options. azoteq,ati-base: $ref: /schemas/types.yaml#/definitions/uint32 enum: [75, 100, 150, 200] description: Specifies the channel's ATI base. The default value is a function of the channel and the device's RUI. azoteq,ati-target: $ref: /schemas/types.yaml#/definitions/uint32 multipleOf: 32 minimum: 0 maximum: 2016 description: Specifies the channel's ATI target. The default value is a function of the channel and the device's RUI. azoteq,cct-increase: $ref: /schemas/types.yaml#/definitions/uint32 minimum: 0 maximum: 16 default: 0 description: Specifies the degree to which the channel's charge cycle time is to be increased, with 0 representing no increase. The maximum value is limited to 4 in the case of the ULP channel, and the property is un- available entirely in the case of the Hall channel. azoteq,proj-bias: $ref: /schemas/types.yaml#/definitions/uint32 enum: [0, 1, 2, 3] default: 0 description: | Specifies the bias current applied during projected-capacitance sensing as follows: 0: 2.5 uA 1: 5 uA 2: 10 uA 3: 20 uA This property is unavailable in the case of the Hall channel. azoteq,sense-freq: $ref: /schemas/types.yaml#/definitions/uint32 enum: [0, 1, 2, 3] description: | Specifies the channel's sensing frequency as follows (parenthesized numbers represent the frequency if 'azoteq,clk-div' is present): 0: 4 MHz (1 MHz) 1: 2 MHz (500 kHz) 2: 1 MHz (250 kHz) 3: 500 kHz (125 kHz) This property is unavailable in the case of the Hall channel. The default value is a function of the channel and the device's RUI. azoteq,ati-band-tighten: type: boolean description: Tightens the ATI band from 1/8 to 1/16 of the desired target (ULP and generic channels only). azoteq,proj-enable: type: boolean description: Enables projected-capacitance sensing (ULP channel only). azoteq,filt-str-np-cnt: $ref: /schemas/types.yaml#/definitions/uint32 enum: [0, 1, 2, 3] default: 0 description: Specifies the raw count filter strength during normal-power mode (ULP and generic channels only). azoteq,filt-str-lp-cnt: $ref: /schemas/types.yaml#/definitions/uint32 enum: [0, 1, 2, 3] default: 0 description: Specifies the raw count filter strength during low-power mode (ULP and generic channels only). azoteq,filt-str-np-lta: $ref: /schemas/types.yaml#/definitions/uint32 enum: [0, 1, 2, 3] default: 0 description: Specifies the long-term average filter strength during normal-power mode (ULP and generic channels only). azoteq,filt-str-lp-lta: $ref: /schemas/types.yaml#/definitions/uint32 enum: [0, 1, 2, 3] default: 0 description: Specifies the long-term average filter strength during low-power mode (ULP and generic channels only). 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 channel. This property is unavailable in the case of the Hall channel. The default value is a function of the channel and the device's RUI. azoteq,tx-enable: $ref: /schemas/types.yaml#/definitions/uint32-array minItems: 1 maxItems: 8 items: minimum: 0 maximum: 7 description: Specifies the TX pin(s) associated with the channel. This property is unavailable in the case of the Hall channel. The default value is a function of the channel and the device's RUI. azoteq,local-cap-size: $ref: /schemas/types.yaml#/definitions/uint32 enum: [0, 1, 2, 3, 4] default: 0 description: | Specifies the capacitance to be added to the channel as follows: 0: 0 pF 1: 0.5 pF 2: 1.0 pF 3: 1.5 pF 4: 2.0 pF This property is unavailable in the case of the ULP or Hall channels. azoteq,sense-mode: $ref: /schemas/types.yaml#/definitions/uint32 enum: [0, 1, 8, 9, 12, 14, 15] description: | Specifies the channel's sensing mode as follows: 0: Self capacitance 1: Projected capacitance 8: Self inductance 9: Mutual inductance 12: External 14: Hall effect 15: Temperature This property is unavailable in the case of the ULP or Hall channels. The default value is a function of the channel and the device's RUI. azoteq,tx-freq: $ref: /schemas/types.yaml#/definitions/uint32 enum: [0, 1, 2, 3] default: 0 description: | Specifies the inductive sensing excitation frequency as follows (parenthesized numbers represent the frequency if 'azoteq,clk-div' is present): 0: 16 MHz (4 MHz) 1: 8 MHz (2 MHz) 2: 4 MHz (1 MHz) 3: 2 MHz (500 kHz) This property is unavailable in the case of the ULP or Hall channels. azoteq,invert-enable: type: boolean description: Inverts the polarity of the states reported for proximity, touch and deep-touch events relative to their respective thresholds (generic channels only). azoteq,comp-disable: type: boolean description: Disables compensation for the channel (generic channels only). azoteq,static-enable: type: boolean description: Enables the static front-end for the channel (generic channels only). azoteq,assoc-select: $ref: /schemas/types.yaml#/definitions/string-array minItems: 1 maxItems: 6 items: enum: - ulp-0 - trackpad-3x2 - trackpad-3x3 - generic-0 - generic-1 - generic-2 - hall description: Specifies the associated channels for which the channel serves as a reference channel. By default, no channels are selected. This prop- erty is only available for the generic channels. azoteq,assoc-weight: $ref: /schemas/types.yaml#/definitions/uint32 minimum: 0 maximum: 255 default: 0 description: Specifies the channel's impact weight if it acts as an associated channel (0 = 0% impact, 255 = 200% impact). This property is only available for the generic channels. patternProperties: "^event-(prox|touch|deep)(-alt)?$": type: object $ref: input.yaml# description: Represents a proximity, touch or deep-touch event reported by the channel in response to a decrease in counts. Node names suffixed with '-alt' instead correspond to an increase in counts. By default, the long-term average tracks an increase in counts such that only events corresponding to a decrease in counts are reported (refer to the datasheet for more information). Specify 'azoteq,dual-direction' to freeze the long-term average when the counts increase or decrease such that events of either direction can be reported. Alternatively, specify 'azoteq,invert-enable' to in- vert the polarity of the states reported by the channel. Complementary events (e.g. event-touch and event-touch-alt) can both be present and specify different key or switch codes, but not differ- ent thresholds or hysteresis (if applicable). Proximity events are unavailable in the case of the Hall channel, and deep-touch events are only available for the generic channels. Unless otherwise specified, default values are a function of the channel and the device's RUI. properties: azoteq,thresh: $ref: /schemas/types.yaml#/definitions/uint32 minimum: 0 maximum: 255 description: Specifies the threshold for the event. azoteq,hyst: $ref: /schemas/types.yaml#/definitions/uint32 minimum: 0 maximum: 15 description: Specifies the hysteresis for the event (touch and deep-touch events only). linux,code: true linux,input-type: enum: [1, 5] description: Specifies whether the event is to be interpreted as a key (1) or a switch (5). By default, Hall-channel events are interpreted as switches and all others are interpreted as keys. additionalProperties: false dependencies: azoteq,assoc-weight: ["azoteq,assoc-select"] additionalProperties: false "^trackpad-3x[2-3]$": type: object $ref: input.yaml# description: Represents all channels associated with the trackpad. The channels are collectively active if the trackpad is defined and inactive otherwise. properties: azoteq,ati-exclude: type: boolean description: Prevents the trackpad channels from participating in an ATI event that is manually triggered during initialization. azoteq,reseed-disable: type: boolean description: Prevents the trackpad channels from being reseeded if the long-term average timeout (defined in 'azoteq,timeout-lta') expires. azoteq,meas-cap-decrease: type: boolean description: Decreases the internal measurement capacitance from 60 pF to 15 pF. azoteq,rx-inactive: $ref: /schemas/types.yaml#/definitions/uint32 enum: [0, 1] default: 0 description: | Specifies how inactive CRX pins are to be terminated as follows: 0: VSS 1: Floating azoteq,linearize: type: boolean description: Inverts the polarity of the trackpad's touch state. azoteq,dual-direction: type: boolean description: Specifies that the trackpad's long-term averages are to freeze in the presence of either increasing or decreasing counts, thereby permitting events to be reported in either direction. azoteq,filt-disable: type: boolean description: Disables raw count filtering for the trackpad channels. azoteq,ati-mode: $ref: /schemas/types.yaml#/definitions/uint32 enum: [0, 1, 2, 3] default: 0 description: | Specifies the trackpad's ATI mode as follows: 0: Disabled 1: Semi-partial 2: Partial 3: Full azoteq,ati-target: $ref: /schemas/types.yaml#/definitions/uint32 multipleOf: 32 minimum: 0 maximum: 2016 default: 0 description: Specifies the trackpad's ATI target. azoteq,cct-increase: $ref: /schemas/types.yaml#/definitions/uint32 minimum: 0 maximum: 4 default: 0 description: Specifies the degree to which the trackpad's charge cycle time is to be increased, with 0 representing no increase. azoteq,proj-bias: $ref: /schemas/types.yaml#/definitions/uint32 enum: [0, 1, 2, 3] default: 0 description: | Specifies the bias current applied during projected-capacitance sensing as follows: 0: 2.5 uA 1: 5 uA 2: 10 uA 3: 20 uA azoteq,sense-freq: $ref: /schemas/types.yaml#/definitions/uint32 enum: [0, 1, 2, 3] default: 0 description: | Specifies the trackpad's sensing frequency as follows (parenthesized numbers represent the frequency if 'azoteq,clk-div' is present): 0: 4 MHz (1 MHz) 1: 2 MHz (500 kHz) 2: 1 MHz (250 kHz) 3: 500 kHz (125 kHz) azoteq,ati-band-tighten: type: boolean description: Tightens the ATI band from 1/8 to 1/16 of the desired target. azoteq,hyst: $ref: /schemas/types.yaml#/definitions/uint32 minimum: 0 maximum: 15 default: 0 description: Specifies the trackpad's touch hysteresis. azoteq,lta-update: $ref: /schemas/types.yaml#/definitions/uint32 enum: [0, 1, 2, 3, 4, 5, 6, 7] default: 0 description: | Specifies the update rate of the trackpad's long-term average during ultra-low-power mode as follows: 0: 2 1: 4 2: 8 3: 16 4: 32 5: 64 6: 128 7: 255 azoteq,filt-str-trackpad: $ref: /schemas/types.yaml#/definitions/uint32 enum: [0, 1, 2, 3] default: 0 description: Specifies the trackpad coordinate filter strength. azoteq,filt-str-np-cnt: $ref: /schemas/types.yaml#/definitions/uint32 enum: [0, 1, 2, 3] default: 0 description: Specifies the raw count filter strength during normal-power mode. azoteq,filt-str-lp-cnt: $ref: /schemas/types.yaml#/definitions/uint32 enum: [0, 1, 2, 3] default: 0 description: Specifies the raw count filter strength during low-power mode. linux,keycodes: minItems: 1 maxItems: 6 description: | Specifies the numeric keycodes associated with each available gesture in the following order (enter 0 for unused gestures): 0: Positive flick or swipe in X direction 1: Negative flick or swipe in X direction 2: Positive flick or swipe in Y direction 3: Negative flick or swipe in Y direction 4: Tap 5: Hold azoteq,gesture-swipe: type: boolean description: Directs the device to interpret axial gestures as a swipe (finger remains on trackpad) instead of a flick (finger leaves trackpad). azoteq,timeout-tap-ms: multipleOf: 16 minimum: 0 maximum: 4080 default: 0 description: Specifies the length of time (in ms) within which a trackpad touch must be released in order to be interpreted as a tap. azoteq,timeout-swipe-ms: multipleOf: 16 minimum: 0 maximum: 4080 default: 0 description: Specifies the length of time (in ms) within which an axial gesture must be completed in order to be interpreted as a flick or swipe. azoteq,thresh-swipe: $ref: /schemas/types.yaml#/definitions/uint32 minimum: 0 maximum: 255 default: 0 description: Specifies the number of points across which an axial gesture must travel in order to be interpreted as a flick or swipe. patternProperties: "^channel-[0-8]$": type: object description: Represents a single trackpad channel. properties: azoteq,thresh: $ref: /schemas/types.yaml#/definitions/uint32 minimum: 0 maximum: 255 default: 0 description: Specifies the threshold for the channel. azoteq,ati-base: $ref: /schemas/types.yaml#/definitions/uint32 minimum: 45 maximum: 300 default: 45 description: Specifies the channel's ATI base. additionalProperties: false dependencies: azoteq,gesture-swipe: ["linux,keycodes"] azoteq,timeout-tap-ms: ["linux,keycodes"] azoteq,timeout-swipe-ms: ["linux,keycodes"] azoteq,thresh-swipe: ["linux,keycodes"] additionalProperties: false required: - compatible - reg - interrupts - "#address-cells" - "#size-cells" additionalProperties: false examples: - | #include <dt-bindings/input/input.h> #include <dt-bindings/interrupt-controller/irq.h> i2c { #address-cells = <1>; #size-cells = <0>; touch@44 { #address-cells = <1>; #size-cells = <0>; compatible = "azoteq,iqs626a"; reg = <0x44>; interrupt-parent = <&gpio>; interrupts = <17 IRQ_TYPE_LEVEL_LOW>; azoteq,rate-np-ms = <16>; azoteq,rate-lp-ms = <160>; azoteq,timeout-pwr-ms = <2560>; azoteq,timeout-lta-ms = <32768>; ulp-0 { azoteq,meas-cap-decrease; azoteq,ati-base = <75>; azoteq,ati-target = <1024>; azoteq,rx-enable = <2>, <3>, <4>, <5>, <6>, <7>; event-prox { linux,code = <KEY_POWER>; }; }; trackpad-3x3 { azoteq,filt-str-np-cnt = <1>; azoteq,filt-str-lp-cnt = <1>; azoteq,hyst = <4>; azoteq,ati-mode = <3>; azoteq,ati-target = <512>; azoteq,proj-bias = <1>; azoteq,sense-freq = <2>; linux,keycodes = <KEY_VOLUMEUP>, <KEY_VOLUMEDOWN>, <KEY_NEXTSONG>, <KEY_PREVIOUSSONG>, <KEY_PLAYPAUSE>, <KEY_STOPCD>; azoteq,gesture-swipe; azoteq,timeout-swipe-ms = <800>; azoteq,timeout-tap-ms = <400>; azoteq,thresh-swipe = <40>; channel-0 { azoteq,thresh = <35>; azoteq,ati-base = <195>; }; channel-1 { azoteq,thresh = <40>; azoteq,ati-base = <195>; }; channel-2 { azoteq,thresh = <40>; azoteq,ati-base = <195>; }; channel-3 { azoteq,thresh = <38>; azoteq,ati-base = <195>; }; channel-4 { azoteq,thresh = <33>; azoteq,ati-base = <195>; }; channel-5 { azoteq,thresh = <38>; azoteq,ati-base = <195>; }; channel-6 { azoteq,thresh = <35>; azoteq,ati-base = <195>; }; channel-7 { azoteq,thresh = <35>; azoteq,ati-base = <195>; }; channel-8 { azoteq,thresh = <35>; azoteq,ati-base = <195>; }; }; /* * Preserve the default register settings for * the temperature-tracking channel leveraged * by reset user interface (RUI) 1. * * Scalar properties (e.g. ATI mode) are left * untouched by simply omitting them; boolean * properties must be specified explicitly as * needed. */ generic-2 { azoteq,reseed-disable; azoteq,meas-cap-decrease; azoteq,dual-direction; azoteq,comp-disable; azoteq,static-enable; }; hall { azoteq,reseed-disable; azoteq,meas-cap-decrease; event-touch { linux,code = <SW_LID>; }; }; }; }; ...