Commit 44dc42d2 authored by Jeff LaBundy's avatar Jeff LaBundy Committed by Dmitry Torokhov

dt-bindings: input: Add bindings for Azoteq IQS7222A/B/C

This patch adds bindings for the Azoteq IQS7222A/B/C family of
capacitive touch controllers.
Signed-off-by: default avatarJeff LaBundy <jeff@labundy.com>
Reviewed-by: default avatarRob Herring <robh@kernel.org>
Link: https://lore.kernel.org/r/20220403221659.865997-2-jeff@labundy.comSigned-off-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
parent db6c4ee7
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/input/azoteq,iqs7222.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#
title: Azoteq IQS7222A/B/C Capacitive Touch Controller
maintainers:
- Jeff LaBundy <jeff@labundy.com>
description: |
The Azoteq IQS7222A, IQS7222B and IQS7222C are multichannel capacitive touch
controllers that feature additional sensing capabilities.
Link to datasheets: https://www.azoteq.com/
properties:
compatible:
enum:
- azoteq,iqs7222a
- azoteq,iqs7222b
- azoteq,iqs7222c
reg:
maxItems: 1
irq-gpios:
maxItems: 1
description:
Specifies the GPIO connected to the device's active-low RDY output.
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,rf-filt-enable:
type: boolean
description: Enables the device's internal RF filter.
azoteq,max-counts:
$ref: /schemas/types.yaml#/definitions/uint32
enum: [0, 1, 2, 3]
description: |
Specifies the maximum number of conversion periods (counts) that can be
reported as follows:
0: 1023
1: 2047
2: 4095
3: 16384
azoteq,auto-mode:
$ref: /schemas/types.yaml#/definitions/uint32
enum: [0, 1, 2, 3]
description: |
Specifies the number of conversions to occur before an interrupt is
generated as follows:
0: 4
1: 8
2: 16
3: 32
azoteq,ati-frac-div-fine:
$ref: /schemas/types.yaml#/definitions/uint32
minimum: 0
maximum: 31
description: Specifies the preloaded ATI fine fractional divider.
azoteq,ati-frac-div-coarse:
$ref: /schemas/types.yaml#/definitions/uint32
minimum: 0
maximum: 31
description: Specifies the preloaded ATI coarse fractional divider.
azoteq,ati-comp-select:
$ref: /schemas/types.yaml#/definitions/uint32
minimum: 0
maximum: 1023
description: Specifies the preloaded ATI compensation selection.
azoteq,lta-beta-lp:
$ref: /schemas/types.yaml#/definitions/uint32
minimum: 0
maximum: 15
description:
Specifies the long-term average filter damping factor to be applied during
low-power mode.
azoteq,lta-beta-np:
$ref: /schemas/types.yaml#/definitions/uint32
minimum: 0
maximum: 15
description:
Specifies the long-term average filter damping factor to be applied during
normal-power mode.
azoteq,counts-beta-lp:
$ref: /schemas/types.yaml#/definitions/uint32
minimum: 0
maximum: 15
description:
Specifies the counts filter damping factor to be applied during low-power
mode.
azoteq,counts-beta-np:
$ref: /schemas/types.yaml#/definitions/uint32
minimum: 0
maximum: 15
description:
Specifies the counts filter damping factor to be applied during normal-
power mode.
azoteq,lta-fast-beta-lp:
$ref: /schemas/types.yaml#/definitions/uint32
minimum: 0
maximum: 15
description:
Specifies the long-term average filter fast damping factor to be applied
during low-power mode.
azoteq,lta-fast-beta-np:
$ref: /schemas/types.yaml#/definitions/uint32
minimum: 0
maximum: 15
description:
Specifies the long-term average filter fast damping factor to be applied
during normal-power mode.
azoteq,timeout-ati-ms:
multipleOf: 500
minimum: 0
maximum: 32767500
description:
Specifies the delay (in ms) before ATI is retried following an ATI error.
azoteq,rate-ati-ms:
minimum: 0
maximum: 65535
description: Specifies the rate (in ms) at which ATI status is evaluated.
azoteq,timeout-np-ms:
minimum: 0
maximum: 65535
description:
Specifies the length of time (in ms) to wait for an event before moving
from normal-power mode to low-power mode.
azoteq,rate-np-ms:
minimum: 0
maximum: 3000
description: Specifies the report rate (in ms) during normal-power mode.
azoteq,timeout-lp-ms:
minimum: 0
maximum: 65535
description:
Specifies the length of time (in ms) to wait for an event before moving
from low-power mode to ultra-low-power mode.
azoteq,rate-lp-ms:
minimum: 0
maximum: 3000
description: Specifies the report rate (in ms) during low-power mode.
azoteq,timeout-ulp-ms:
minimum: 0
maximum: 65535
description:
Specifies the rate (in ms) at which channels not regularly sampled during
ultra-low-power mode are updated.
azoteq,rate-ulp-ms:
minimum: 0
maximum: 3000
description: Specifies the report rate (in ms) during ultra-low-power mode.
patternProperties:
"^cycle-[0-9]$":
type: object
description: Represents a conversion cycle serving two sensing channels.
properties:
azoteq,conv-period:
$ref: /schemas/types.yaml#/definitions/uint32
minimum: 0
maximum: 255
description: Specifies the cycle's conversion period.
azoteq,conv-frac:
$ref: /schemas/types.yaml#/definitions/uint32
minimum: 0
maximum: 255
description: Specifies the cycle's conversion frequency fraction.
azoteq,tx-enable:
$ref: /schemas/types.yaml#/definitions/uint32-array
minItems: 1
maxItems: 9
items:
minimum: 0
maximum: 8
description: Specifies the CTx pin(s) associated with the cycle.
azoteq,rx-float-inactive:
type: boolean
description: Floats any inactive CRx pins instead of grounding them.
azoteq,dead-time-enable:
type: boolean
description:
Increases the denominator of the conversion frequency formula by one.
azoteq,tx-freq-fosc:
type: boolean
description:
Fixes the conversion frequency to that of the device's core clock.
azoteq,vbias-enable:
type: boolean
description: Enables the bias voltage for use during inductive sensing.
azoteq,sense-mode:
$ref: /schemas/types.yaml#/definitions/uint32
enum: [0, 1, 2, 3]
description: |
Specifies the cycle's sensing mode as follows:
0: None
1: Self capacitive
2: Mutual capacitive
3: Inductive
Note that in the case of IQS7222A, cycles 5 and 6 are restricted to
Hall-effect sensing.
azoteq,iref-enable:
type: boolean
description:
Enables the current reference for use during various sensing modes.
azoteq,iref-level:
$ref: /schemas/types.yaml#/definitions/uint32
minimum: 0
maximum: 15
description: Specifies the cycle's current reference level.
azoteq,iref-trim:
$ref: /schemas/types.yaml#/definitions/uint32
minimum: 0
maximum: 15
description: Specifies the cycle's current reference trim.
dependencies:
azoteq,iref-level: ["azoteq,iref-enable"]
azoteq,iref-trim: ["azoteq,iref-enable"]
additionalProperties: false
"^channel-([0-9]|1[0-9])$":
type: object
description:
Represents a single sensing channel. A channel is active if defined and
inactive otherwise.
Note that in the case of IQS7222A, channels 10 and 11 are restricted to
Hall-effect sensing with events reported on channel 10 only.
properties:
azoteq,ulp-allow:
type: boolean
description:
Permits the device to enter ultra-low-power mode while the channel
lies in a state of touch or proximity.
azoteq,ref-select:
$ref: /schemas/types.yaml#/definitions/uint32
minimum: 0
maximum: 9
description: Specifies a separate reference channel to be followed.
azoteq,ref-weight:
$ref: /schemas/types.yaml#/definitions/uint32
minimum: 0
maximum: 65535
description: Specifies the relative weight of the reference channel.
azoteq,use-prox:
type: boolean
description:
Activates the reference channel in response to proximity events
instead of touch events.
azoteq,ati-band:
$ref: /schemas/types.yaml#/definitions/uint32
enum: [0, 1, 2, 3]
description: |
Specifies the channel's ATI band as a fraction of its ATI target as
follows:
0: 1/16
1: 1/8
2: 1/4
3: 1/2
azoteq,global-halt:
type: boolean
description:
Specifies that the channel's long-term average is to freeze if any
other participating channel lies in a proximity or touch state.
azoteq,invert-enable:
type: boolean
description:
Inverts the polarity of the states reported for proximity and touch
events relative to their respective thresholds.
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,rx-enable:
$ref: /schemas/types.yaml#/definitions/uint32-array
minItems: 1
maxItems: 4
items:
minimum: 0
maximum: 7
description: Specifies the CRx pin(s) associated with the channel.
azoteq,samp-cap-double:
type: boolean
description: Doubles the sampling capacitance from 40 pF to 80 pF.
azoteq,vref-half:
type: boolean
description: Halves the discharge threshold from 1.0 V to 0.5 V.
azoteq,proj-bias:
$ref: /schemas/types.yaml#/definitions/uint32
enum: [0, 1, 2, 3]
description: |
Specifies the bias current applied during mutual (projected)
capacitive sensing as follows:
0: 2 uA
1: 5 uA
2: 7 uA
3: 10 uA
azoteq,ati-target:
$ref: /schemas/types.yaml#/definitions/uint32
multipleOf: 8
minimum: 0
maximum: 2040
description: Specifies the channel's ATI target.
azoteq,ati-base:
$ref: /schemas/types.yaml#/definitions/uint32
multipleOf: 16
minimum: 0
maximum: 496
description: Specifies the channel's ATI base.
azoteq,ati-mode:
$ref: /schemas/types.yaml#/definitions/uint32
enum: [0, 1, 2, 3, 4, 5]
description: |
Specifies the channel's ATI mode as follows:
0: Disabled
1: Compensation
2: Compensation divider
3: Fine fractional divider
4: Coarse fractional divider
5: Full
azoteq,ati-frac-div-fine:
$ref: /schemas/types.yaml#/definitions/uint32
minimum: 0
maximum: 31
description: Specifies the channel's ATI fine fractional divider.
azoteq,ati-frac-mult-coarse:
$ref: /schemas/types.yaml#/definitions/uint32
minimum: 0
maximum: 15
description: Specifies the channel's ATI coarse fractional multiplier.
azoteq,ati-frac-div-coarse:
$ref: /schemas/types.yaml#/definitions/uint32
minimum: 0
maximum: 31
description: Specifies the channel's ATI coarse fractional divider.
azoteq,ati-comp-div:
$ref: /schemas/types.yaml#/definitions/uint32
minimum: 0
maximum: 31
description: Specifies the channel's ATI compensation divider.
azoteq,ati-comp-select:
$ref: /schemas/types.yaml#/definitions/uint32
minimum: 0
maximum: 1023
description: Specifies the channel's ATI compensation selection.
azoteq,debounce-enter:
$ref: /schemas/types.yaml#/definitions/uint32
minimum: 0
maximum: 15
description: Specifies the channel's debounce entrance factor.
azoteq,debounce-exit:
$ref: /schemas/types.yaml#/definitions/uint32
minimum: 0
maximum: 15
description: Specifies the channel's debounce exit factor.
patternProperties:
"^event-(prox|touch)$":
type: object
description:
Represents a proximity or touch event reported by the channel.
properties:
azoteq,gpio-select:
$ref: /schemas/types.yaml#/definitions/uint32-array
minItems: 1
maxItems: 3
items:
minimum: 0
maximum: 2
description: |
Specifies one or more GPIO mapped to the event as follows:
0: GPIO0
1: GPIO3 (IQS7222C only)
2: GPIO4 (IQS7222C only)
Note that although multiple events can be mapped to a single
GPIO, they must all be of the same type (proximity, touch or
slider gesture).
azoteq,thresh:
$ref: /schemas/types.yaml#/definitions/uint32
description:
Specifies the threshold for the event. Valid entries range from
0-127 and 0-255 for proximity and touch events, respectively.
azoteq,hyst:
$ref: /schemas/types.yaml#/definitions/uint32
minimum: 0
maximum: 255
description:
Specifies the hysteresis for the event (touch events only).
azoteq,timeout-press-ms:
multipleOf: 500
minimum: 0
maximum: 127500
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.
The IQS7222B does not feature channel-specific timeouts; the time-
out specified for any one channel applies to all channels.
linux,code:
$ref: /schemas/types.yaml#/definitions/uint32
description:
Numeric key or switch code associated with the event. Specify
KEY_RESERVED (0) to opt out of event reporting.
linux,input-type:
$ref: /schemas/types.yaml#/definitions/uint32
enum: [1, 5]
default: 1
description:
Specifies whether the event is to be interpreted as a key (1)
or a switch (5).
required:
- linux,code
additionalProperties: false
dependencies:
azoteq,ref-weight: ["azoteq,ref-select"]
azoteq,use-prox: ["azoteq,ref-select"]
additionalProperties: false
"^slider-[0-1]$":
type: object
description: Represents a slider comprising three or four channels.
properties:
azoteq,channel-select:
$ref: /schemas/types.yaml#/definitions/uint32-array
minItems: 3
maxItems: 4
items:
minimum: 0
maximum: 9
description:
Specifies the order of the channels that participate in the slider.
azoteq,slider-size:
$ref: /schemas/types.yaml#/definitions/uint32
minimum: 0
maximum: 65535
description:
Specifies the slider's one-dimensional resolution, equal to the
maximum coordinate plus one.
azoteq,lower-cal:
$ref: /schemas/types.yaml#/definitions/uint32
minimum: 0
maximum: 255
description: Specifies the slider's lower starting point.
azoteq,upper-cal:
$ref: /schemas/types.yaml#/definitions/uint32
minimum: 0
maximum: 255
description: Specifies the slider's upper starting point.
azoteq,top-speed:
$ref: /schemas/types.yaml#/definitions/uint32
minimum: 0
maximum: 65535
description:
Specifies the speed of movement after which coordinate filtering is
no longer applied.
azoteq,bottom-speed:
$ref: /schemas/types.yaml#/definitions/uint32
multipleOf: 4
minimum: 0
maximum: 1020
description:
Specifies the speed of movement after which coordinate filtering is
linearly reduced.
azoteq,bottom-beta:
$ref: /schemas/types.yaml#/definitions/uint32
minimum: 0
maximum: 7
description:
Specifies the coordinate filter damping factor to be applied
while the speed of movement is below that which is specified
by azoteq,bottom-speed.
azoteq,static-beta:
type: boolean
description:
Applies the coordinate filter damping factor specified by
azoteq,bottom-beta regardless of the speed of movement.
azoteq,use-prox:
type: boolean
description:
Directs the slider to respond to the proximity states of the selected
channels instead of their corresponding touch states. Note the slider
cannot report granular coordinates during a state of proximity.
linux,axis:
$ref: /schemas/types.yaml#/definitions/uint32
description:
Specifies the absolute axis to which coordinates are mapped. Specify
ABS_WHEEL to operate the slider as a wheel (IQS7222C only).
patternProperties:
"^event-(press|tap|(swipe|flick)-(pos|neg))$":
type: object
description:
Represents a press or gesture (IQS7222A only) event reported by
the slider.
properties:
linux,code:
$ref: /schemas/types.yaml#/definitions/uint32
description: Numeric key code associated with the event.
azoteq,gesture-max-ms:
multipleOf: 4
minimum: 0
maximum: 1020
description:
Specifies the length of time (in ms) within which a tap, swipe
or flick gesture must be completed in order to be acknowledged
by the device. The number specified for any one swipe or flick
gesture applies to all remaining swipe or flick gestures.
azoteq,gesture-min-ms:
multipleOf: 4
minimum: 0
maximum: 124
description:
Specifies the length of time (in ms) for which a tap gesture must
be held in order to be acknowledged by the device.
azoteq,gesture-dist:
$ref: /schemas/types.yaml#/definitions/uint32
multipleOf: 16
minimum: 0
maximum: 4080
description:
Specifies the distance across which a swipe or flick gesture must
travel in order to be acknowledged by the device. The number spec-
ified for any one swipe or flick gesture applies to all remaining
swipe or flick gestures.
azoteq,gpio-select:
$ref: /schemas/types.yaml#/definitions/uint32-array
minItems: 1
maxItems: 1
items:
minimum: 0
maximum: 0
description: |
Specifies an individual GPIO mapped to a tap, swipe or flick
gesture as follows:
0: GPIO0
1: GPIO3 (reserved)
2: GPIO4 (reserved)
Note that although multiple events can be mapped to a single
GPIO, they must all be of the same type (proximity, touch or
slider gesture).
required:
- linux,code
additionalProperties: false
required:
- azoteq,channel-select
additionalProperties: false
"^gpio-[0-2]$":
type: object
description: |
Represents a GPIO mapped to one or more events as follows:
gpio-0: GPIO0
gpio-1: GPIO3 (IQS7222C only)
gpio-2: GPIO4 (IQS7222C only)
allOf:
- $ref: ../pinctrl/pincfg-node.yaml#
properties:
drive-open-drain: true
additionalProperties: false
allOf:
- if:
properties:
compatible:
contains:
const: azoteq,iqs7222b
then:
patternProperties:
"^cycle-[0-9]$":
properties:
azoteq,iref-enable: false
"^channel-([0-9]|1[0-9])$":
properties:
azoteq,ref-select: false
patternProperties:
"^event-(prox|touch)$":
properties:
azoteq,gpio-select: false
"^slider-[0-1]$": false
"^gpio-[0-2]$": false
- if:
properties:
compatible:
contains:
const: azoteq,iqs7222a
then:
patternProperties:
"^channel-([0-9]|1[0-9])$":
patternProperties:
"^event-(prox|touch)$":
properties:
azoteq,gpio-select:
maxItems: 1
items:
maximum: 0
"^slider-[0-1]$":
properties:
azoteq,slider-size:
multipleOf: 16
maximum: 4080
azoteq,top-speed:
multipleOf: 4
maximum: 1020
else:
patternProperties:
"^channel-([0-9]|1[0-9])$":
properties:
azoteq,ulp-allow: false
"^slider-[0-1]$":
patternProperties:
"^event-(press|tap|(swipe|flick)-(pos|neg))$":
properties:
azoteq,gesture-max-ms: false
azoteq,gesture-min-ms: false
azoteq,gesture-dist: false
azoteq,gpio-select: false
required:
- compatible
- reg
- irq-gpios
additionalProperties: false
examples:
- |
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
i2c {
#address-cells = <1>;
#size-cells = <0>;
iqs7222a@44 {
compatible = "azoteq,iqs7222a";
reg = <0x44>;
irq-gpios = <&gpio 4 GPIO_ACTIVE_LOW>;
azoteq,lta-beta-lp = <7>;
azoteq,lta-beta-np = <8>;
azoteq,counts-beta-lp = <2>;
azoteq,counts-beta-np = <3>;
azoteq,lta-fast-beta-lp = <3>;
azoteq,lta-fast-beta-np = <4>;
cycle-0 {
azoteq,conv-period = <5>;
azoteq,conv-frac = <127>;
azoteq,tx-enable = <1>, <2>, <4>, <5>;
azoteq,dead-time-enable;
azoteq,sense-mode = <2>;
};
cycle-1 {
azoteq,conv-period = <5>;
azoteq,conv-frac = <127>;
azoteq,tx-enable = <5>;
azoteq,dead-time-enable;
azoteq,sense-mode = <2>;
};
cycle-2 {
azoteq,conv-period = <5>;
azoteq,conv-frac = <127>;
azoteq,tx-enable = <4>;
azoteq,dead-time-enable;
azoteq,sense-mode = <2>;
};
cycle-3 {
azoteq,conv-period = <5>;
azoteq,conv-frac = <127>;
azoteq,tx-enable = <2>;
azoteq,dead-time-enable;
azoteq,sense-mode = <2>;
};
cycle-4 {
azoteq,conv-period = <5>;
azoteq,conv-frac = <127>;
azoteq,tx-enable = <1>;
azoteq,dead-time-enable;
azoteq,sense-mode = <2>;
};
cycle-5 {
azoteq,conv-period = <2>;
azoteq,conv-frac = <0>;
};
cycle-6 {
azoteq,conv-period = <2>;
azoteq,conv-frac = <0>;
};
channel-0 {
azoteq,ulp-allow;
azoteq,global-halt;
azoteq,invert-enable;
azoteq,rx-enable = <3>;
azoteq,ati-target = <800>;
azoteq,ati-base = <208>;
azoteq,ati-mode = <5>;
};
channel-1 {
azoteq,global-halt;
azoteq,invert-enable;
azoteq,rx-enable = <3>;
azoteq,ati-target = <496>;
azoteq,ati-base = <208>;
azoteq,ati-mode = <5>;
};
channel-2 {
azoteq,global-halt;
azoteq,invert-enable;
azoteq,rx-enable = <3>;
azoteq,ati-target = <496>;
azoteq,ati-base = <208>;
azoteq,ati-mode = <5>;
};
channel-3 {
azoteq,global-halt;
azoteq,invert-enable;
azoteq,rx-enable = <3>;
azoteq,ati-target = <496>;
azoteq,ati-base = <208>;
azoteq,ati-mode = <5>;
};
channel-4 {
azoteq,global-halt;
azoteq,invert-enable;
azoteq,rx-enable = <3>;
azoteq,ati-target = <496>;
azoteq,ati-base = <208>;
azoteq,ati-mode = <5>;
};
channel-5 {
azoteq,ulp-allow;
azoteq,global-halt;
azoteq,invert-enable;
azoteq,rx-enable = <6>;
azoteq,ati-target = <800>;
azoteq,ati-base = <144>;
azoteq,ati-mode = <5>;
};
channel-6 {
azoteq,global-halt;
azoteq,invert-enable;
azoteq,rx-enable = <6>;
azoteq,ati-target = <496>;
azoteq,ati-base = <160>;
azoteq,ati-mode = <5>;
event-touch {
linux,code = <KEY_MUTE>;
};
};
channel-7 {
azoteq,global-halt;
azoteq,invert-enable;
azoteq,rx-enable = <6>;
azoteq,ati-target = <496>;
azoteq,ati-base = <160>;
azoteq,ati-mode = <5>;
event-touch {
linux,code = <KEY_VOLUMEDOWN>;
};
};
channel-8 {
azoteq,global-halt;
azoteq,invert-enable;
azoteq,rx-enable = <6>;
azoteq,ati-target = <496>;
azoteq,ati-base = <160>;
azoteq,ati-mode = <5>;
event-touch {
linux,code = <KEY_VOLUMEUP>;
};
};
channel-9 {
azoteq,global-halt;
azoteq,invert-enable;
azoteq,rx-enable = <6>;
azoteq,ati-target = <496>;
azoteq,ati-base = <160>;
azoteq,ati-mode = <5>;
event-touch {
linux,code = <KEY_POWER>;
};
};
channel-10 {
azoteq,ulp-allow;
azoteq,ati-target = <496>;
azoteq,ati-base = <112>;
event-touch {
linux,code = <SW_LID>;
linux,input-type = <EV_SW>;
};
};
channel-11 {
azoteq,ati-target = <496>;
azoteq,ati-base = <112>;
};
slider-0 {
azoteq,channel-select = <1>, <2>, <3>, <4>;
azoteq,slider-size = <4080>;
azoteq,upper-cal = <50>;
azoteq,lower-cal = <30>;
azoteq,top-speed = <200>;
azoteq,bottom-speed = <1>;
azoteq,bottom-beta = <3>;
event-tap {
linux,code = <KEY_PLAYPAUSE>;
azoteq,gesture-max-ms = <600>;
azoteq,gesture-min-ms = <24>;
};
event-flick-pos {
linux,code = <KEY_NEXTSONG>;
azoteq,gesture-max-ms = <600>;
azoteq,gesture-dist = <816>;
};
event-flick-neg {
linux,code = <KEY_PREVIOUSSONG>;
};
};
};
};
...
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment