| # SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) |
| %YAML 1.2 |
| --- |
| $id: http://devicetree.org/schemas/input/iqs269a.yaml# |
| $schema: http://devicetree.org/meta-schemas/core.yaml# |
| |
| title: Azoteq IQS269A Capacitive Touch Controller |
| |
| maintainers: |
| - Jeff LaBundy <jeff@labundy.com> |
| |
| allOf: |
| - $ref: input.yaml# |
| |
| description: | |
| The Azoteq IQS269A is an 8-channel capacitive touch controller that features |
| additional Hall-effect and inductive sensing capabilities. |
| |
| Link to datasheet: https://www.azoteq.com/ |
| |
| properties: |
| compatible: |
| enum: |
| - azoteq,iqs269a |
| - azoteq,iqs269a-00 |
| - azoteq,iqs269a-d0 |
| |
| reg: |
| maxItems: 1 |
| |
| interrupts: |
| maxItems: 1 |
| |
| "#address-cells": |
| const: 1 |
| |
| "#size-cells": |
| const: 0 |
| |
| azoteq,hall-enable: |
| type: boolean |
| description: |
| Enables Hall-effect sensing on channels 6 and 7. In this case, keycodes |
| assigned to channel 6 are ignored and keycodes assigned to channel 7 are |
| interpreted as switch codes. Refer to the datasheet for requirements im- |
| posed on channels 6 and 7 by Hall-effect sensing. |
| |
| 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 (channel 0 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-update: |
| $ref: /schemas/types.yaml#/definitions/uint32 |
| minimum: 0 |
| maximum: 7 |
| default: 3 |
| description: Specifies the ultra-low-power mode update rate. |
| |
| azoteq,reseed-offset: |
| type: boolean |
| description: |
| Applies an 8-count offset to all long-term averages upon either ATI or |
| reseed events. |
| |
| 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. |
| |
| 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. |
| |
| 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. |
| |
| 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,rate-np-ms: |
| minimum: 0 |
| maximum: 255 |
| default: 16 |
| description: Specifies the report rate (in ms) during normal-power mode. |
| |
| azoteq,rate-lp-ms: |
| minimum: 0 |
| maximum: 255 |
| default: 160 |
| description: Specifies the report rate (in ms) during low-power mode. |
| |
| azoteq,rate-ulp-ms: |
| multipleOf: 16 |
| minimum: 0 |
| maximum: 4080 |
| default: 160 |
| 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 during normal- |
| power mode before transitioning to low-power mode. |
| |
| azoteq,timeout-lta-ms: |
| multipleOf: 512 |
| minimum: 0 |
| maximum: 130560 |
| default: 32768 |
| 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. |
| |
| 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,ati-band-tighten: |
| type: boolean |
| description: Tightens the ATI band from 1/8 to 1/16 of the desired target. |
| |
| azoteq,filt-disable: |
| type: boolean |
| description: Disables all raw count filtering. |
| |
| azoteq,gpio3-select: |
| $ref: /schemas/types.yaml#/definitions/uint32 |
| minimum: 0 |
| maximum: 7 |
| default: 0 |
| description: |
| Selects the channel for which the GPIO3 pin represents touch state. |
| |
| azoteq,dual-direction: |
| type: boolean |
| description: |
| Specifies that 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,tx-freq: |
| $ref: /schemas/types.yaml#/definitions/uint32 |
| enum: [0, 1, 2, 3] |
| default: 0 |
| description: | |
| Specifies the inductive sensing excitation frequency as follows (paren- |
| thesized 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) |
| |
| azoteq,global-cap-increase: |
| type: boolean |
| description: Increases the global capacitance adder from 0.5 pF to 1.5 pF. |
| |
| 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,tracking-enable: |
| type: boolean |
| description: |
| Enables all associated channels to track their respective reference |
| channels. |
| |
| azoteq,filt-str-slider: |
| $ref: /schemas/types.yaml#/definitions/uint32 |
| enum: [0, 1, 2, 3] |
| default: 1 |
| description: Specifies the slider coordinate filter strength. |
| |
| azoteq,touch-hold-ms: |
| multipleOf: 256 |
| minimum: 256 |
| maximum: 65280 |
| default: 5120 |
| description: |
| Specifies the length of time (in ms) for which the channel selected by |
| 'azoteq,gpio3-select' must be held in a state of touch in order for an |
| approximately 60-ms pulse to be asserted on the GPIO4 pin. |
| |
| linux,keycodes: |
| minItems: 1 |
| maxItems: 8 |
| description: | |
| Specifies the numeric keycodes associated with each available gesture in |
| the following order (enter 0 for unused gestures): |
| 0: Slider 0 tap |
| 1: Slider 0 hold |
| 2: Slider 0 positive flick or swipe |
| 3: Slider 0 negative flick or swipe |
| 4: Slider 1 tap |
| 5: Slider 1 hold |
| 6: Slider 1 positive flick or swipe |
| 7: Slider 1 negative flick or swipe |
| |
| azoteq,gesture-swipe: |
| type: boolean |
| description: |
| Directs the device to interpret axial gestures as a swipe (finger remains |
| on slider) instead of a flick (finger leaves slider). |
| |
| azoteq,timeout-tap-ms: |
| multipleOf: 16 |
| minimum: 0 |
| maximum: 4080 |
| default: 400 |
| description: |
| Specifies the length of time (in ms) within which a slider touch must be |
| released in order to be interpreted as a tap. Default and maximum values |
| as well as step size are reduced by a factor of 4 with device version 2. |
| |
| azoteq,timeout-swipe-ms: |
| multipleOf: 16 |
| minimum: 0 |
| maximum: 4080 |
| default: 2000 |
| 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. Default and max- |
| imum values as well as step size are reduced by a factor of 4 with device |
| version 2. |
| |
| azoteq,thresh-swipe: |
| $ref: /schemas/types.yaml#/definitions/uint32 |
| minimum: 0 |
| maximum: 255 |
| default: 128 |
| description: |
| Specifies the number of points across which an axial gesture must travel |
| in order to be interpreted as a flick or swipe. |
| |
| dependencies: |
| azoteq,gesture-swipe: ["linux,keycodes"] |
| azoteq,timeout-tap-ms: ["linux,keycodes"] |
| azoteq,timeout-swipe-ms: ["linux,keycodes"] |
| azoteq,thresh-swipe: ["linux,keycodes"] |
| |
| patternProperties: |
| "^channel@[0-7]$": |
| type: object |
| description: |
| Represents a single sensing channel. A channel is active if defined and |
| inactive otherwise. |
| |
| properties: |
| reg: |
| minimum: 0 |
| maximum: 7 |
| description: Index of the channel. |
| |
| 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,blocking-enable: |
| type: boolean |
| description: Specifies that the channel is a blocking channel. |
| |
| azoteq,slider0-select: |
| type: boolean |
| description: Specifies that the channel participates in slider 0. |
| |
| azoteq,slider1-select: |
| type: boolean |
| description: Specifies that the channel participates in slider 1. |
| |
| 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. By default, only |
| the CRX pin corresponding to the channel's index is enabled (e.g. CRX0 |
| for channel 0). |
| |
| azoteq,tx-enable: |
| $ref: /schemas/types.yaml#/definitions/uint32-array |
| minItems: 1 |
| maxItems: 8 |
| items: |
| minimum: 0 |
| maximum: 7 |
| default: [0, 1, 2, 3, 4, 5, 6, 7] |
| description: Specifies the TX pin(s) associated with the channel. |
| |
| azoteq,meas-cap-decrease: |
| type: boolean |
| description: |
| Decreases the internal measurement capacitance from 60 pF to 15 pF. |
| |
| azoteq,rx-float-inactive: |
| type: boolean |
| description: Floats any inactive CRX pins instead of grounding them. |
| |
| azoteq,local-cap-size: |
| $ref: /schemas/types.yaml#/definitions/uint32 |
| enum: [0, 1, 2] |
| default: 0 |
| description: | |
| Specifies the capacitance to be added to the channel as follows: |
| 0: None |
| 1: Global adder (based on 'azoteq,global-cap-increase') |
| 2: Global adder + 0.5 pF |
| |
| 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. |
| |
| azoteq,proj-bias: |
| $ref: /schemas/types.yaml#/definitions/uint32 |
| enum: [0, 1, 2, 3] |
| default: 2 |
| 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-mode: |
| $ref: /schemas/types.yaml#/definitions/uint32 |
| enum: [0, 1, 9, 14, 15] |
| default: 0 |
| description: | |
| Specifies the channel's sensing mode as follows: |
| 0: Self capacitance |
| 1: Projected capacitance |
| 9: Self or mutual inductance |
| 14: Hall effect |
| 15: Temperature |
| |
| azoteq,sense-freq: |
| $ref: /schemas/types.yaml#/definitions/uint32 |
| enum: [0, 1, 2, 3] |
| default: 1 |
| 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) |
| |
| azoteq,static-enable: |
| type: boolean |
| description: Enables the static front-end for the channel. |
| |
| azoteq,ati-mode: |
| $ref: /schemas/types.yaml#/definitions/uint32 |
| enum: [0, 1, 2, 3] |
| default: 3 |
| description: | |
| Specifies the channel's ATI mode as follows: |
| 0: Disabled |
| 1: Semi-partial |
| 2: Partial |
| 3: Full |
| |
| azoteq,ati-base: |
| $ref: /schemas/types.yaml#/definitions/uint32 |
| enum: [75, 100, 150, 200] |
| default: 100 |
| description: Specifies the channel's ATI base. |
| |
| azoteq,ati-target: |
| $ref: /schemas/types.yaml#/definitions/uint32 |
| multipleOf: 32 |
| minimum: 0 |
| maximum: 2016 |
| default: 512 |
| description: Specifies the channel's ATI target. |
| |
| azoteq,assoc-select: |
| $ref: /schemas/types.yaml#/definitions/uint32-array |
| minItems: 1 |
| maxItems: 8 |
| items: |
| minimum: 0 |
| maximum: 7 |
| description: |
| Specifies the associated channels for which the channel serves as a |
| reference channel. By default, no channels are selected. |
| |
| 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). |
| |
| patternProperties: |
| "^event-prox(-alt)?$": |
| type: object |
| $ref: input.yaml# |
| description: |
| Represents a proximity event reported by the channel in response to |
| a decrease in counts. Node names suffixed with '-alt' instead corre- |
| spond 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). |
| |
| properties: |
| azoteq,thresh: |
| $ref: /schemas/types.yaml#/definitions/uint32 |
| minimum: 0 |
| maximum: 255 |
| default: 10 |
| description: Specifies the threshold for the event. |
| |
| linux,code: true |
| |
| additionalProperties: false |
| |
| "^event-touch(-alt)?$": |
| type: object |
| $ref: input.yaml# |
| description: Represents a touch event reported by the channel. |
| |
| properties: |
| azoteq,thresh: |
| $ref: /schemas/types.yaml#/definitions/uint32 |
| minimum: 0 |
| maximum: 255 |
| default: 8 |
| description: Specifies the threshold for the event. |
| |
| azoteq,hyst: |
| $ref: /schemas/types.yaml#/definitions/uint32 |
| minimum: 0 |
| maximum: 15 |
| default: 4 |
| description: Specifies the hysteresis for the event. |
| |
| linux,code: true |
| |
| additionalProperties: false |
| |
| "^event-deep(-alt)?$": |
| type: object |
| $ref: input.yaml# |
| description: Represents a deep-touch event reported by the channel. |
| |
| properties: |
| azoteq,thresh: |
| $ref: /schemas/types.yaml#/definitions/uint32 |
| minimum: 0 |
| maximum: 255 |
| default: 26 |
| description: Specifies the threshold for the event. |
| |
| azoteq,hyst: |
| $ref: /schemas/types.yaml#/definitions/uint32 |
| minimum: 0 |
| maximum: 15 |
| default: 0 |
| description: Specifies the hysteresis for the event. |
| |
| linux,code: true |
| |
| additionalProperties: false |
| |
| required: |
| - reg |
| |
| additionalProperties: false |
| |
| if: |
| properties: |
| compatible: |
| contains: |
| enum: |
| - azoteq,iqs269a-d0 |
| then: |
| patternProperties: |
| "^channel@[0-7]$": |
| properties: |
| azoteq,slider1-select: false |
| else: |
| properties: |
| azoteq,touch-hold-ms: 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,iqs269a"; |
| reg = <0x44>; |
| interrupt-parent = <&gpio>; |
| interrupts = <17 IRQ_TYPE_LEVEL_LOW>; |
| |
| azoteq,hall-enable; |
| azoteq,suspend-mode = <2>; |
| |
| linux,keycodes = <KEY_PLAYPAUSE>, |
| <KEY_STOPCD>, |
| <KEY_NEXTSONG>, |
| <KEY_PREVIOUSSONG>; |
| |
| azoteq,timeout-tap-ms = <400>; |
| azoteq,timeout-swipe-ms = <800>; |
| |
| channel@0 { |
| reg = <0x0>; |
| |
| event-prox { |
| linux,code = <KEY_POWER>; |
| }; |
| }; |
| |
| channel@1 { |
| reg = <0x1>; |
| azoteq,slider0-select; |
| }; |
| |
| channel@2 { |
| reg = <0x2>; |
| azoteq,slider0-select; |
| }; |
| |
| channel@3 { |
| reg = <0x3>; |
| azoteq,slider0-select; |
| }; |
| |
| channel@4 { |
| reg = <0x4>; |
| azoteq,slider0-select; |
| }; |
| |
| channel@5 { |
| reg = <0x5>; |
| azoteq,slider0-select; |
| }; |
| |
| channel@6 { |
| reg = <0x6>; |
| azoteq,invert-enable; |
| azoteq,static-enable; |
| azoteq,reseed-disable; |
| azoteq,rx-enable = <0>; |
| azoteq,sense-freq = <0x0>; |
| azoteq,sense-mode = <0xE>; |
| azoteq,ati-mode = <0x0>; |
| azoteq,ati-base = <200>; |
| azoteq,ati-target = <320>; |
| }; |
| |
| channel@7 { |
| reg = <0x7>; |
| azoteq,invert-enable; |
| azoteq,static-enable; |
| azoteq,reseed-disable; |
| azoteq,rx-enable = <0>, <6>; |
| azoteq,sense-freq = <0x0>; |
| azoteq,sense-mode = <0xE>; |
| azoteq,ati-mode = <0x3>; |
| azoteq,ati-base = <200>; |
| azoteq,ati-target = <320>; |
| |
| event-touch { |
| linux,code = <SW_LID>; |
| }; |
| }; |
| }; |
| }; |
| |
| ... |