GNU Linux-libre 6.1.90-gnu
[releases.git] / Documentation / devicetree / bindings / input / iqs269a.yaml
1 # SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
2 %YAML 1.2
3 ---
4 $id: http://devicetree.org/schemas/input/iqs269a.yaml#
5 $schema: http://devicetree.org/meta-schemas/core.yaml#
6
7 title: Azoteq IQS269A Capacitive Touch Controller
8
9 maintainers:
10   - Jeff LaBundy <jeff@labundy.com>
11
12 description: |
13   The Azoteq IQS269A is an 8-channel capacitive touch controller that features
14   additional Hall-effect and inductive sensing capabilities.
15
16   Link to datasheet: https://www.azoteq.com/
17
18 properties:
19   compatible:
20     const: azoteq,iqs269a
21
22   reg:
23     maxItems: 1
24
25   interrupts:
26     maxItems: 1
27
28   "#address-cells":
29     const: 1
30
31   "#size-cells":
32     const: 0
33
34   azoteq,hall-enable:
35     type: boolean
36     description:
37       Enables Hall-effect sensing on channels 6 and 7. In this case, keycodes
38       assigned to channel 6 are ignored and keycodes assigned to channel 7 are
39       interpreted as switch codes. Refer to the datasheet for requirements im-
40       posed on channels 6 and 7 by Hall-effect sensing.
41
42   azoteq,suspend-mode:
43     $ref: /schemas/types.yaml#/definitions/uint32
44     enum: [0, 1, 2, 3]
45     default: 0
46     description: |
47       Specifies the power mode during suspend as follows:
48       0: Automatic (same as normal runtime, i.e. suspend/resume disabled)
49       1: Low power (all sensing at a reduced reporting rate)
50       2: Ultra-low power (channel 0 proximity sensing)
51       3: Halt (no sensing)
52
53   azoteq,clk-div:
54     type: boolean
55     description: Divides the device's core clock by a factor of 4.
56
57   azoteq,ulp-update:
58     $ref: /schemas/types.yaml#/definitions/uint32
59     minimum: 0
60     maximum: 7
61     default: 3
62     description: Specifies the ultra-low-power mode update rate.
63
64   azoteq,reseed-offset:
65     type: boolean
66     description:
67       Applies an 8-count offset to all long-term averages upon either ATI or
68       reseed events.
69
70   azoteq,filt-str-lp-lta:
71     $ref: /schemas/types.yaml#/definitions/uint32
72     enum: [0, 1, 2, 3]
73     default: 0
74     description:
75       Specifies the long-term average filter strength during low-power mode.
76
77   azoteq,filt-str-lp-cnt:
78     $ref: /schemas/types.yaml#/definitions/uint32
79     enum: [0, 1, 2, 3]
80     default: 0
81     description:
82       Specifies the raw count filter strength during low-power mode.
83
84   azoteq,filt-str-np-lta:
85     $ref: /schemas/types.yaml#/definitions/uint32
86     enum: [0, 1, 2, 3]
87     default: 0
88     description:
89       Specifies the long-term average filter strength during normal-power mode.
90
91   azoteq,filt-str-np-cnt:
92     $ref: /schemas/types.yaml#/definitions/uint32
93     enum: [0, 1, 2, 3]
94     default: 0
95     description:
96       Specifies the raw count filter strength during normal-power mode.
97
98   azoteq,rate-np-ms:
99     minimum: 0
100     maximum: 255
101     default: 16
102     description: Specifies the report rate (in ms) during normal-power mode.
103
104   azoteq,rate-lp-ms:
105     minimum: 0
106     maximum: 255
107     default: 160
108     description: Specifies the report rate (in ms) during low-power mode.
109
110   azoteq,rate-ulp-ms:
111     multipleOf: 16
112     minimum: 0
113     maximum: 4080
114     default: 160
115     description: Specifies the report rate (in ms) during ultra-low-power mode.
116
117   azoteq,timeout-pwr-ms:
118     multipleOf: 512
119     minimum: 0
120     maximum: 130560
121     default: 2560
122     description:
123       Specifies the length of time (in ms) to wait for an event during normal-
124       power mode before transitioning to low-power mode.
125
126   azoteq,timeout-lta-ms:
127     multipleOf: 512
128     minimum: 0
129     maximum: 130560
130     default: 32768
131     description:
132       Specifies the length of time (in ms) to wait before resetting the long-
133       term average of all channels. Specify the maximum timeout to disable it
134       altogether.
135
136   azoteq,ati-band-disable:
137     type: boolean
138     description: Disables the ATI band check.
139
140   azoteq,ati-lp-only:
141     type: boolean
142     description: Limits automatic ATI to low-power mode.
143
144   azoteq,ati-band-tighten:
145     type: boolean
146     description: Tightens the ATI band from 1/8 to 1/16 of the desired target.
147
148   azoteq,filt-disable:
149     type: boolean
150     description: Disables all raw count filtering.
151
152   azoteq,gpio3-select:
153     $ref: /schemas/types.yaml#/definitions/uint32
154     minimum: 0
155     maximum: 7
156     default: 0
157     description:
158       Selects the channel for which the GPIO3 pin represents touch state.
159
160   azoteq,dual-direction:
161     type: boolean
162     description:
163       Specifies that long-term averages are to freeze in the presence of either
164       increasing or decreasing counts, thereby permitting events to be reported
165       in either direction.
166
167   azoteq,tx-freq:
168     $ref: /schemas/types.yaml#/definitions/uint32
169     enum: [0, 1, 2, 3]
170     default: 0
171     description: |
172       Specifies the inductive sensing excitation frequency as follows (paren-
173       thesized numbers represent the frequency if 'azoteq,clk-div' is present):
174       0: 16 MHz (4 MHz)
175       1: 8 MHz (2 MHz)
176       2: 4 MHz (1 MHz)
177       3: 2 MHz (500 kHz)
178
179   azoteq,global-cap-increase:
180     type: boolean
181     description: Increases the global capacitance adder from 0.5 pF to 1.5 pF.
182
183   azoteq,reseed-select:
184     $ref: /schemas/types.yaml#/definitions/uint32
185     enum: [0, 1, 2, 3]
186     default: 0
187     description: |
188       Specifies the event(s) that prompt the device to reseed (i.e. reset the
189       long-term average) of an associated channel as follows:
190       0: None
191       1: Proximity
192       2: Proximity or touch
193       3: Proximity, touch or deep touch
194
195   azoteq,tracking-enable:
196     type: boolean
197     description:
198       Enables all associated channels to track their respective reference
199       channels.
200
201   azoteq,filt-str-slider:
202     $ref: /schemas/types.yaml#/definitions/uint32
203     enum: [0, 1, 2, 3]
204     default: 1
205     description: Specifies the slider coordinate filter strength.
206
207 patternProperties:
208   "^channel@[0-7]$":
209     type: object
210     description:
211       Represents a single sensing channel. A channel is active if defined and
212       inactive otherwise.
213
214     properties:
215       reg:
216         minimum: 0
217         maximum: 7
218         description: Index of the channel.
219
220       azoteq,reseed-disable:
221         type: boolean
222         description:
223           Prevents the channel from being reseeded if the long-term average
224           timeout (defined in 'azoteq,timeout-lta') expires.
225
226       azoteq,blocking-enable:
227         type: boolean
228         description: Specifies that the channel is a blocking channel.
229
230       azoteq,slider0-select:
231         type: boolean
232         description: Specifies that the channel participates in slider 0.
233
234       azoteq,slider1-select:
235         type: boolean
236         description: Specifies that the channel participates in slider 1.
237
238       azoteq,rx-enable:
239         $ref: /schemas/types.yaml#/definitions/uint32-array
240         minItems: 1
241         maxItems: 8
242         items:
243           minimum: 0
244           maximum: 7
245         description:
246           Specifies the CRX pin(s) associated with the channel. By default, only
247           the CRX pin corresponding to the channel's index is enabled (e.g. CRX0
248           for channel 0).
249
250       azoteq,tx-enable:
251         $ref: /schemas/types.yaml#/definitions/uint32-array
252         minItems: 1
253         maxItems: 8
254         items:
255           minimum: 0
256           maximum: 7
257         default: [0, 1, 2, 3, 4, 5, 6, 7]
258         description: Specifies the TX pin(s) associated with the channel.
259
260       azoteq,meas-cap-decrease:
261         type: boolean
262         description:
263           Decreases the internal measurement capacitance from 60 pF to 15 pF.
264
265       azoteq,rx-float-inactive:
266         type: boolean
267         description: Floats any inactive CRX pins instead of grounding them.
268
269       azoteq,local-cap-size:
270         $ref: /schemas/types.yaml#/definitions/uint32
271         enum: [0, 1, 2]
272         default: 0
273         description: |
274           Specifies the capacitance to be added to the channel as follows:
275           0: None
276           1: Global adder (based on 'azoteq,global-cap-increase')
277           2: Global adder + 0.5 pF
278
279       azoteq,invert-enable:
280         type: boolean
281         description:
282           Inverts the polarity of the states reported for proximity, touch and
283           deep-touch events relative to their respective thresholds.
284
285       azoteq,proj-bias:
286         $ref: /schemas/types.yaml#/definitions/uint32
287         enum: [0, 1, 2, 3]
288         default: 2
289         description: |
290           Specifies the bias current applied during projected-capacitance
291           sensing as follows:
292           0: 2.5 uA
293           1: 5 uA
294           2: 10 uA
295           3: 20 uA
296
297       azoteq,sense-mode:
298         $ref: /schemas/types.yaml#/definitions/uint32
299         enum: [0, 1, 9, 14, 15]
300         default: 0
301         description: |
302           Specifies the channel's sensing mode as follows:
303           0:  Self capacitance
304           1:  Projected capacitance
305           9:  Self or mutual inductance
306           14: Hall effect
307           15: Temperature
308
309       azoteq,sense-freq:
310         $ref: /schemas/types.yaml#/definitions/uint32
311         enum: [0, 1, 2, 3]
312         default: 1
313         description: |
314           Specifies the channel's sensing frequency as follows (parenthesized
315           numbers represent the frequency if 'azoteq,clk-div' is present):
316           0: 4 MHz (1 MHz)
317           1: 2 MHz (500 kHz)
318           2: 1 MHz (250 kHz)
319           3: 500 kHz (125 kHz)
320
321       azoteq,static-enable:
322         type: boolean
323         description: Enables the static front-end for the channel.
324
325       azoteq,ati-mode:
326         $ref: /schemas/types.yaml#/definitions/uint32
327         enum: [0, 1, 2, 3]
328         default: 3
329         description: |
330           Specifies the channel's ATI mode as follows:
331           0: Disabled
332           1: Semi-partial
333           2: Partial
334           3: Full
335
336       azoteq,ati-base:
337         $ref: /schemas/types.yaml#/definitions/uint32
338         enum: [75, 100, 150, 200]
339         default: 100
340         description: Specifies the channel's ATI base.
341
342       azoteq,ati-target:
343         $ref: /schemas/types.yaml#/definitions/uint32
344         multipleOf: 32
345         minimum: 0
346         maximum: 2016
347         default: 512
348         description: Specifies the channel's ATI target.
349
350       azoteq,assoc-select:
351         $ref: /schemas/types.yaml#/definitions/uint32-array
352         minItems: 1
353         maxItems: 8
354         items:
355           minimum: 0
356           maximum: 7
357         description:
358           Specifies the associated channels for which the channel serves as a
359           reference channel. By default, no channels are selected.
360
361       azoteq,assoc-weight:
362         $ref: /schemas/types.yaml#/definitions/uint32
363         minimum: 0
364         maximum: 255
365         default: 0
366         description:
367           Specifies the channel's impact weight if it acts as an associated
368           channel (0 = 0% impact, 255 = 200% impact).
369
370     patternProperties:
371       "^event-prox(-alt)?$":
372         type: object
373         $ref: input.yaml#
374         description:
375           Represents a proximity event reported by the channel in response to
376           a decrease in counts. Node names suffixed with '-alt' instead corre-
377           spond to an increase in counts.
378
379           By default, the long-term average tracks an increase in counts such
380           that only events corresponding to a decrease in counts are reported
381           (refer to the datasheet for more information).
382
383           Specify 'azoteq,dual-direction' to freeze the long-term average when
384           the counts increase or decrease such that events of either direction
385           can be reported. Alternatively, specify 'azoteq,invert-enable' to in-
386           vert the polarity of the states reported by the channel.
387
388           Complementary events (e.g. event-touch and event-touch-alt) can both
389           be present and specify different key or switch codes, but not differ-
390           ent thresholds or hysteresis (if applicable).
391
392         properties:
393           azoteq,thresh:
394             $ref: /schemas/types.yaml#/definitions/uint32
395             minimum: 0
396             maximum: 255
397             default: 10
398             description: Specifies the threshold for the event.
399
400           linux,code: true
401
402         additionalProperties: false
403
404       "^event-touch(-alt)?$":
405         type: object
406         $ref: input.yaml#
407         description: Represents a touch event reported by the channel.
408
409         properties:
410           azoteq,thresh:
411             $ref: /schemas/types.yaml#/definitions/uint32
412             minimum: 0
413             maximum: 255
414             default: 8
415             description: Specifies the threshold for the event.
416
417           azoteq,hyst:
418             $ref: /schemas/types.yaml#/definitions/uint32
419             minimum: 0
420             maximum: 15
421             default: 4
422             description: Specifies the hysteresis for the event.
423
424           linux,code: true
425
426         additionalProperties: false
427
428       "^event-deep(-alt)?$":
429         type: object
430         $ref: input.yaml#
431         description: Represents a deep-touch event reported by the channel.
432
433         properties:
434           azoteq,thresh:
435             $ref: /schemas/types.yaml#/definitions/uint32
436             minimum: 0
437             maximum: 255
438             default: 26
439             description: Specifies the threshold for the event.
440
441           azoteq,hyst:
442             $ref: /schemas/types.yaml#/definitions/uint32
443             minimum: 0
444             maximum: 15
445             default: 0
446             description: Specifies the hysteresis for the event.
447
448           linux,code: true
449
450         additionalProperties: false
451
452     required:
453       - reg
454
455     additionalProperties: false
456
457 required:
458   - compatible
459   - reg
460   - interrupts
461   - "#address-cells"
462   - "#size-cells"
463
464 additionalProperties: false
465
466 examples:
467   - |
468     #include <dt-bindings/input/input.h>
469     #include <dt-bindings/interrupt-controller/irq.h>
470
471     i2c {
472             #address-cells = <1>;
473             #size-cells = <0>;
474
475             touch@44 {
476                     #address-cells = <1>;
477                     #size-cells = <0>;
478
479                     compatible = "azoteq,iqs269a";
480                     reg = <0x44>;
481                     interrupt-parent = <&gpio>;
482                     interrupts = <17 IRQ_TYPE_LEVEL_LOW>;
483
484                     azoteq,hall-enable;
485                     azoteq,suspend-mode = <2>;
486
487                     channel@0 {
488                             reg = <0x0>;
489
490                             event-prox {
491                                     linux,code = <KEY_POWER>;
492                             };
493                     };
494
495                     channel@1 {
496                             reg = <0x1>;
497                             azoteq,slider0-select;
498                     };
499
500                     channel@2 {
501                             reg = <0x2>;
502                             azoteq,slider0-select;
503                     };
504
505                     channel@3 {
506                             reg = <0x3>;
507                             azoteq,slider0-select;
508                     };
509
510                     channel@4 {
511                             reg = <0x4>;
512                             azoteq,slider0-select;
513                     };
514
515                     channel@5 {
516                             reg = <0x5>;
517                             azoteq,slider0-select;
518                     };
519
520                     channel@6 {
521                             reg = <0x6>;
522                             azoteq,invert-enable;
523                             azoteq,static-enable;
524                             azoteq,reseed-disable;
525                             azoteq,rx-enable = <0>;
526                             azoteq,sense-freq = <0x0>;
527                             azoteq,sense-mode = <0xE>;
528                             azoteq,ati-mode = <0x0>;
529                             azoteq,ati-base = <200>;
530                             azoteq,ati-target = <320>;
531                     };
532
533                     channel@7 {
534                             reg = <0x7>;
535                             azoteq,invert-enable;
536                             azoteq,static-enable;
537                             azoteq,reseed-disable;
538                             azoteq,rx-enable = <0>, <6>;
539                             azoteq,sense-freq = <0x0>;
540                             azoteq,sense-mode = <0xE>;
541                             azoteq,ati-mode = <0x3>;
542                             azoteq,ati-base = <200>;
543                             azoteq,ati-target = <320>;
544
545                             event-touch {
546                                     linux,code = <SW_LID>;
547                             };
548                     };
549             };
550     };
551
552 ...