GNU Linux-libre 6.8.9-gnu
[releases.git] / Documentation / devicetree / bindings / input / azoteq,iqs7222.yaml
1 # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2 %YAML 1.2
3 ---
4 $id: http://devicetree.org/schemas/input/azoteq,iqs7222.yaml#
5 $schema: http://devicetree.org/meta-schemas/core.yaml#
6
7 title: Azoteq IQS7222A/B/C/D Capacitive Touch Controller
8
9 maintainers:
10   - Jeff LaBundy <jeff@labundy.com>
11
12 description: |
13   The Azoteq IQS7222A, IQS7222B, IQS7222C and IQS7222D are multichannel
14   capacitive touch controllers that feature additional sensing capabilities.
15
16   Link to datasheets: https://www.azoteq.com/
17
18 properties:
19   compatible:
20     enum:
21       - azoteq,iqs7222a
22       - azoteq,iqs7222b
23       - azoteq,iqs7222c
24       - azoteq,iqs7222d
25
26   reg:
27     maxItems: 1
28
29   irq-gpios:
30     maxItems: 1
31     description:
32       Specifies the GPIO connected to the device's active-low RDY output.
33
34   reset-gpios:
35     maxItems: 1
36     description:
37       Specifies the GPIO connected to the device's active-low MCLR input. The
38       device is temporarily held in hardware reset prior to initialization if
39       this property is present.
40
41   azoteq,max-counts:
42     $ref: /schemas/types.yaml#/definitions/uint32
43     enum: [0, 1, 2, 3]
44     description: |
45       Specifies the maximum number of conversion periods (counts) that can be
46       reported as follows:
47       0: 1023
48       1: 2047
49       2: 4095
50       3: 16384
51
52   azoteq,auto-mode:
53     $ref: /schemas/types.yaml#/definitions/uint32
54     enum: [0, 1, 2, 3]
55     description: |
56       Specifies the number of conversions to occur before an interrupt is
57       generated as follows:
58       0: 4
59       1: 8
60       2: 16
61       3: 32
62
63   azoteq,ati-frac-div-fine:
64     $ref: /schemas/types.yaml#/definitions/uint32
65     minimum: 0
66     maximum: 31
67     description: Specifies the preloaded ATI fine fractional divider.
68
69   azoteq,ati-frac-div-coarse:
70     $ref: /schemas/types.yaml#/definitions/uint32
71     minimum: 0
72     maximum: 31
73     description: Specifies the preloaded ATI coarse fractional divider.
74
75   azoteq,ati-comp-select:
76     $ref: /schemas/types.yaml#/definitions/uint32
77     minimum: 0
78     maximum: 1023
79     description: Specifies the preloaded ATI compensation selection.
80
81   azoteq,lta-beta-lp:
82     $ref: /schemas/types.yaml#/definitions/uint32
83     minimum: 0
84     maximum: 15
85     description:
86       Specifies the long-term average filter damping factor to be applied during
87       low-power mode.
88
89   azoteq,lta-beta-np:
90     $ref: /schemas/types.yaml#/definitions/uint32
91     minimum: 0
92     maximum: 15
93     description:
94       Specifies the long-term average filter damping factor to be applied during
95       normal-power mode.
96
97   azoteq,counts-beta-lp:
98     $ref: /schemas/types.yaml#/definitions/uint32
99     minimum: 0
100     maximum: 15
101     description:
102       Specifies the counts filter damping factor to be applied during low-power
103       mode.
104
105   azoteq,counts-beta-np:
106     $ref: /schemas/types.yaml#/definitions/uint32
107     minimum: 0
108     maximum: 15
109     description:
110       Specifies the counts filter damping factor to be applied during normal-
111       power mode.
112
113   azoteq,lta-fast-beta-lp:
114     $ref: /schemas/types.yaml#/definitions/uint32
115     minimum: 0
116     maximum: 15
117     description:
118       Specifies the long-term average filter fast damping factor to be applied
119       during low-power mode.
120
121   azoteq,lta-fast-beta-np:
122     $ref: /schemas/types.yaml#/definitions/uint32
123     minimum: 0
124     maximum: 15
125     description:
126       Specifies the long-term average filter fast damping factor to be applied
127       during normal-power mode.
128
129   azoteq,timeout-ati-ms:
130     multipleOf: 500
131     minimum: 0
132     maximum: 32767500
133     description:
134       Specifies the delay (in ms) before ATI is retried following an ATI error.
135
136   azoteq,rate-ati-ms:
137     minimum: 0
138     maximum: 65535
139     description: Specifies the rate (in ms) at which ATI status is evaluated.
140
141   azoteq,timeout-np-ms:
142     minimum: 0
143     maximum: 65535
144     description:
145       Specifies the length of time (in ms) to wait for an event before moving
146       from normal-power mode to low-power mode.
147
148   azoteq,rate-np-ms:
149     minimum: 0
150     maximum: 3000
151     description: Specifies the report rate (in ms) during normal-power mode.
152
153   azoteq,timeout-lp-ms:
154     minimum: 0
155     maximum: 65535
156     description:
157       Specifies the length of time (in ms) to wait for an event before moving
158       from low-power mode to ultra-low-power mode.
159
160   azoteq,rate-lp-ms:
161     minimum: 0
162     maximum: 3000
163     description: Specifies the report rate (in ms) during low-power mode.
164
165   azoteq,timeout-ulp-ms:
166     minimum: 0
167     maximum: 65535
168     description:
169       Specifies the rate (in ms) at which channels not regularly sampled during
170       ultra-low-power mode are updated.
171
172   azoteq,rate-ulp-ms:
173     minimum: 0
174     maximum: 3000
175     description: Specifies the report rate (in ms) during ultra-low-power mode.
176
177   touchscreen-size-x: true
178   touchscreen-size-y: true
179   touchscreen-inverted-x: true
180   touchscreen-inverted-y: true
181   touchscreen-swapped-x-y: true
182
183   trackpad:
184     type: object
185     description: Represents all channels associated with the trackpad.
186
187     properties:
188       azoteq,channel-select:
189         $ref: /schemas/types.yaml#/definitions/uint32-array
190         minItems: 1
191         maxItems: 12
192         items:
193           minimum: 0
194           maximum: 13
195         description:
196           Specifies the order of the channels that participate in the trackpad.
197           Specify 255 to omit a given channel for the purpose of mapping a non-
198           rectangular trackpad.
199
200       azoteq,num-rows:
201         $ref: /schemas/types.yaml#/definitions/uint32
202         minimum: 1
203         maximum: 12
204         description: Specifies the number of rows that comprise the trackpad.
205
206       azoteq,num-cols:
207         $ref: /schemas/types.yaml#/definitions/uint32
208         minimum: 1
209         maximum: 12
210         description: Specifies the number of columns that comprise the trackpad.
211
212       azoteq,top-speed:
213         $ref: /schemas/types.yaml#/definitions/uint32
214         multipleOf: 4
215         minimum: 0
216         maximum: 1020
217         description:
218           Specifies the speed (in coordinates traveled per conversion) after
219           which coordinate filtering is no longer applied.
220
221       azoteq,bottom-speed:
222         $ref: /schemas/types.yaml#/definitions/uint32
223         minimum: 0
224         maximum: 255
225         description:
226           Specifies the speed (in coordinates traveled per conversion) after
227           which coordinate filtering is linearly reduced.
228
229       azoteq,use-prox:
230         type: boolean
231         description:
232           Directs the trackpad to respond to the proximity states of the
233           selected channels instead of their corresponding touch states.
234           Note the trackpad cannot report granular coordinates during a
235           state of proximity.
236
237     patternProperties:
238       "^azoteq,lower-cal-(x|y)$":
239         $ref: /schemas/types.yaml#/definitions/uint32
240         minimum: 0
241         maximum: 255
242         description: Specifies the trackpad's lower starting points.
243
244       "^azoteq,upper-cal-(x|y)$":
245         $ref: /schemas/types.yaml#/definitions/uint32
246         minimum: 0
247         maximum: 255
248         description: Specifies the trackpad's upper starting points.
249
250       "^event-(press|tap|(swipe|flick)-(x|y)-(pos|neg))$":
251         type: object
252         $ref: input.yaml#
253         description:
254           Represents a press or gesture event reported by the trackpad. Specify
255           'linux,code' under the press event to report absolute coordinates.
256
257         properties:
258           linux,code: true
259
260           azoteq,gesture-angle-tighten:
261             type: boolean
262             description:
263               Limits the tangent of the gesture angle to 0.5 (axial gestures
264               only). If specified in one direction, the effect is applied in
265               either direction.
266
267           azoteq,gesture-max-ms:
268             multipleOf: 16
269             minimum: 0
270             maximum: 4080
271             description:
272               Specifies the length of time (in ms) within which a tap, swipe
273               or flick gesture must be completed in order to be acknowledged
274               by the device. The number specified for any one swipe or flick
275               gesture applies to all other swipe or flick gestures.
276
277           azoteq,gesture-min-ms:
278             multipleOf: 16
279             minimum: 0
280             maximum: 4080
281             description:
282               Specifies the length of time (in ms) for which a tap gesture must
283               be held in order to be acknowledged by the device.
284
285           azoteq,gesture-dist:
286             $ref: /schemas/types.yaml#/definitions/uint32
287             minimum: 0
288             maximum: 65535
289             description:
290               Specifies the distance (in coordinates) across which a swipe or
291               flick gesture must travel in order to be acknowledged by the
292               device. The number specified for any one swipe or flick gesture
293               applies to all remaining swipe or flick gestures.
294
295               For tap gestures, this property specifies the distance from the
296               original point of contact across which the contact is permitted
297               to travel before the gesture is rejected by the device.
298
299           azoteq,gpio-select:
300             $ref: /schemas/types.yaml#/definitions/uint32-array
301             minItems: 1
302             maxItems: 3
303             items:
304               minimum: 0
305               maximum: 2
306             description: |
307               Specifies one or more GPIO mapped to the event as follows:
308               0: GPIO0
309               1: GPIO3
310               2: GPIO4
311
312               Note that although multiple events can be mapped to a single
313               GPIO, they must all be of the same type (proximity, touch or
314               trackpad gesture).
315
316         additionalProperties: false
317
318     required:
319       - azoteq,channel-select
320
321     additionalProperties: false
322
323 patternProperties:
324   "^cycle-[0-9]$":
325     type: object
326     description: Represents a conversion cycle serving two sensing channels.
327
328     properties:
329       azoteq,conv-period:
330         $ref: /schemas/types.yaml#/definitions/uint32
331         minimum: 0
332         maximum: 255
333         description: Specifies the cycle's conversion period.
334
335       azoteq,conv-frac:
336         $ref: /schemas/types.yaml#/definitions/uint32
337         minimum: 0
338         maximum: 255
339         description: Specifies the cycle's conversion frequency fraction.
340
341       azoteq,tx-enable:
342         $ref: /schemas/types.yaml#/definitions/uint32-array
343         minItems: 1
344         maxItems: 9
345         items:
346           minimum: 0
347           maximum: 8
348         description: Specifies the CTx pin(s) associated with the cycle.
349
350       azoteq,rx-float-inactive:
351         type: boolean
352         description: Floats any inactive CRx pins instead of grounding them.
353
354       azoteq,dead-time-enable:
355         type: boolean
356         description:
357           Increases the denominator of the conversion frequency formula by one.
358
359       azoteq,tx-freq-fosc:
360         type: boolean
361         description:
362           Fixes the conversion frequency to that of the device's core clock.
363
364       azoteq,vbias-enable:
365         type: boolean
366         description: Enables the bias voltage for use during inductive sensing.
367
368       azoteq,sense-mode:
369         $ref: /schemas/types.yaml#/definitions/uint32
370         enum: [0, 1, 2, 3]
371         description: |
372           Specifies the cycle's sensing mode as follows:
373           0: None
374           1: Self capacitive
375           2: Mutual capacitive
376           3: Inductive
377
378           Note that in the case of IQS7222A, cycles 5 and 6 are restricted to
379           Hall-effect sensing.
380
381       azoteq,iref-enable:
382         type: boolean
383         description:
384           Enables the current reference for use during various sensing modes.
385
386       azoteq,iref-level:
387         $ref: /schemas/types.yaml#/definitions/uint32
388         minimum: 0
389         maximum: 15
390         description: Specifies the cycle's current reference level.
391
392       azoteq,iref-trim:
393         $ref: /schemas/types.yaml#/definitions/uint32
394         minimum: 0
395         maximum: 15
396         description: Specifies the cycle's current reference trim.
397
398     dependencies:
399       azoteq,iref-level: ["azoteq,iref-enable"]
400       azoteq,iref-trim: ["azoteq,iref-enable"]
401
402     additionalProperties: false
403
404   "^channel-([0-9]|1[0-9])$":
405     type: object
406     description:
407       Represents a single sensing channel. A channel is active if defined and
408       inactive otherwise.
409
410       Note that in the case of IQS7222A, channels 10 and 11 are restricted to
411       Hall-effect sensing with events reported on channel 10 only.
412
413     properties:
414       azoteq,ulp-allow:
415         type: boolean
416         description:
417           Permits the device to enter ultra-low-power mode while the channel
418           lies in a state of touch or proximity.
419
420       azoteq,ref-select:
421         $ref: /schemas/types.yaml#/definitions/uint32
422         minimum: 0
423         maximum: 9
424         description: Specifies a separate reference channel to be followed.
425
426       azoteq,ref-weight:
427         $ref: /schemas/types.yaml#/definitions/uint32
428         minimum: 0
429         maximum: 65535
430         description: Specifies the relative weight of the reference channel.
431
432       azoteq,use-prox:
433         type: boolean
434         description:
435           Activates the reference channel in response to proximity events
436           instead of touch events.
437
438       azoteq,counts-filt-enable:
439         type: boolean
440         description: Applies counts filtering to the channel.
441
442       azoteq,ati-band:
443         $ref: /schemas/types.yaml#/definitions/uint32
444         enum: [0, 1, 2, 3]
445         description: |
446           Specifies the channel's ATI band as a fraction of its ATI target as
447           follows:
448           0: 1/16
449           1: 1/8
450           2: 1/4
451           3: 1/2
452
453       azoteq,global-halt:
454         type: boolean
455         description:
456           Specifies that the channel's long-term average is to freeze if any
457           other participating channel lies in a proximity or touch state.
458
459       azoteq,invert-enable:
460         type: boolean
461         description:
462           Inverts the polarity of the states reported for proximity and touch
463           events relative to their respective thresholds.
464
465       azoteq,dual-direction:
466         type: boolean
467         description:
468           Specifies that the channel's long-term average is to freeze in the
469           presence of either increasing or decreasing counts, thereby permit-
470           ting events to be reported in either direction.
471
472       azoteq,rx-enable:
473         $ref: /schemas/types.yaml#/definitions/uint32-array
474         minItems: 1
475         maxItems: 4
476         items:
477           minimum: 0
478           maximum: 7
479         description: Specifies the CRx pin(s) associated with the channel.
480
481       azoteq,samp-cap-double:
482         type: boolean
483         description: Doubles the sampling capacitance from 40 pF to 80 pF.
484
485       azoteq,vref-half:
486         type: boolean
487         description: Halves the discharge threshold from 1.0 V to 0.5 V.
488
489       azoteq,proj-bias:
490         $ref: /schemas/types.yaml#/definitions/uint32
491         enum: [0, 1, 2, 3]
492         description: |
493           Specifies the bias current applied during mutual (projected)
494           capacitive sensing as follows:
495           0: 2 uA
496           1: 5 uA
497           2: 7 uA
498           3: 10 uA
499
500       azoteq,ati-target:
501         $ref: /schemas/types.yaml#/definitions/uint32
502         multipleOf: 8
503         minimum: 0
504         maximum: 2040
505         description: Specifies the channel's ATI target.
506
507       azoteq,ati-base:
508         $ref: /schemas/types.yaml#/definitions/uint32
509         multipleOf: 16
510         minimum: 0
511         maximum: 496
512         description: Specifies the channel's ATI base.
513
514       azoteq,ati-mode:
515         $ref: /schemas/types.yaml#/definitions/uint32
516         enum: [0, 1, 2, 3, 4, 5]
517         description: |
518           Specifies the channel's ATI mode as follows:
519           0: Disabled
520           1: Compensation
521           2: Compensation divider
522           3: Fine fractional divider
523           4: Coarse fractional divider
524           5: Full
525
526       azoteq,ati-frac-div-fine:
527         $ref: /schemas/types.yaml#/definitions/uint32
528         minimum: 0
529         maximum: 31
530         description: Specifies the channel's ATI fine fractional divider.
531
532       azoteq,ati-frac-mult-coarse:
533         $ref: /schemas/types.yaml#/definitions/uint32
534         minimum: 0
535         maximum: 15
536         description: Specifies the channel's ATI coarse fractional multiplier.
537
538       azoteq,ati-frac-div-coarse:
539         $ref: /schemas/types.yaml#/definitions/uint32
540         minimum: 0
541         maximum: 31
542         description: Specifies the channel's ATI coarse fractional divider.
543
544       azoteq,ati-comp-div:
545         $ref: /schemas/types.yaml#/definitions/uint32
546         minimum: 0
547         maximum: 31
548         description: Specifies the channel's ATI compensation divider.
549
550       azoteq,ati-comp-select:
551         $ref: /schemas/types.yaml#/definitions/uint32
552         minimum: 0
553         maximum: 1023
554         description: Specifies the channel's ATI compensation selection.
555
556       azoteq,debounce-enter:
557         $ref: /schemas/types.yaml#/definitions/uint32
558         minimum: 0
559         maximum: 15
560         description: Specifies the channel's debounce entrance factor.
561
562       azoteq,debounce-exit:
563         $ref: /schemas/types.yaml#/definitions/uint32
564         minimum: 0
565         maximum: 15
566         description: Specifies the channel's debounce exit factor.
567
568     patternProperties:
569       "^event-(prox|touch)$":
570         type: object
571         $ref: input.yaml#
572         description:
573           Represents a proximity or touch event reported by the channel.
574
575         properties:
576           azoteq,gpio-select:
577             $ref: /schemas/types.yaml#/definitions/uint32-array
578             minItems: 1
579             maxItems: 3
580             items:
581               minimum: 0
582               maximum: 2
583             description: |
584               Specifies one or more GPIO mapped to the event as follows:
585               0: GPIO0
586               1: GPIO3
587               2: GPIO4
588
589               Note that although multiple events can be mapped to a single
590               GPIO, they must all be of the same type (proximity, touch or
591               slider/trackpad gesture).
592
593           azoteq,thresh:
594             $ref: /schemas/types.yaml#/definitions/uint32
595             description:
596               Specifies the threshold for the event. Valid entries range from
597               0-127 and 0-255 for proximity and touch events, respectively.
598
599           azoteq,hyst:
600             $ref: /schemas/types.yaml#/definitions/uint32
601             minimum: 0
602             maximum: 255
603             description:
604               Specifies the hysteresis for the event (touch events only).
605
606           azoteq,timeout-press-ms:
607             multipleOf: 500
608             minimum: 0
609             maximum: 127500
610             description:
611               Specifies the length of time (in ms) to wait before automatically
612               releasing a press event. Specify zero to allow the press state to
613               persist indefinitely.
614
615               The IQS7222B does not feature channel-specific timeouts; the time-
616               out specified for any one channel applies to all channels.
617
618           linux,code: true
619
620           linux,input-type:
621             enum: [1, 5]
622             default: 1
623             description:
624               Specifies whether the event is to be interpreted as a key (1)
625               or a switch (5).
626
627         additionalProperties: false
628
629     dependencies:
630       azoteq,ref-weight: ["azoteq,ref-select"]
631       azoteq,use-prox: ["azoteq,ref-select"]
632
633     additionalProperties: false
634
635   "^slider-[0-1]$":
636     type: object
637     description: Represents a slider comprising three or four channels.
638
639     properties:
640       azoteq,channel-select:
641         $ref: /schemas/types.yaml#/definitions/uint32-array
642         minItems: 3
643         maxItems: 4
644         items:
645           minimum: 0
646           maximum: 9
647         description:
648           Specifies the order of the channels that participate in the slider.
649
650       azoteq,slider-size:
651         $ref: /schemas/types.yaml#/definitions/uint32
652         minimum: 1
653         maximum: 65535
654         description:
655           Specifies the slider's one-dimensional resolution, equal to the
656           maximum coordinate plus one.
657
658       azoteq,lower-cal:
659         $ref: /schemas/types.yaml#/definitions/uint32
660         minimum: 0
661         maximum: 255
662         description: Specifies the slider's lower starting point.
663
664       azoteq,upper-cal:
665         $ref: /schemas/types.yaml#/definitions/uint32
666         minimum: 0
667         maximum: 255
668         description: Specifies the slider's upper starting point.
669
670       azoteq,top-speed:
671         $ref: /schemas/types.yaml#/definitions/uint32
672         minimum: 0
673         maximum: 65535
674         description:
675           Specifies the speed (in coordinates traveled per conversion) after
676           which coordinate filtering is no longer applied.
677
678       azoteq,bottom-speed:
679         $ref: /schemas/types.yaml#/definitions/uint32
680         minimum: 0
681         maximum: 255
682         description:
683           Specifies the speed (in coordinates traveled per conversion) after
684           which coordinate filtering is linearly reduced.
685
686       azoteq,bottom-beta:
687         $ref: /schemas/types.yaml#/definitions/uint32
688         minimum: 0
689         maximum: 7
690         description:
691           Specifies the coordinate filter damping factor to be applied
692           while the speed of movement is below that which is specified
693           by azoteq,bottom-speed.
694
695       azoteq,static-beta:
696         type: boolean
697         description:
698           Applies the coordinate filter damping factor specified by
699           azoteq,bottom-beta regardless of the speed of movement.
700
701       azoteq,use-prox:
702         type: boolean
703         description:
704           Directs the slider to respond to the proximity states of the selected
705           channels instead of their corresponding touch states. Note the slider
706           cannot report granular coordinates during a state of proximity.
707
708       linux,axis:
709         $ref: /schemas/types.yaml#/definitions/uint32
710         description:
711           Specifies the absolute axis to which coordinates are mapped. Specify
712           ABS_WHEEL to operate the slider as a wheel (IQS7222C only).
713
714     patternProperties:
715       "^event-(press|tap|(swipe|flick)-(pos|neg))$":
716         type: object
717         $ref: input.yaml#
718         description:
719           Represents a press or gesture (IQS7222A only) event reported by
720           the slider.
721
722         properties:
723           linux,code: true
724
725           azoteq,gesture-max-ms:
726             multipleOf: 16
727             minimum: 0
728             maximum: 4080
729             description:
730               Specifies the length of time (in ms) within which a tap, swipe
731               or flick gesture must be completed in order to be acknowledged
732               by the device. The number specified for any one swipe or flick
733               gesture applies to all remaining swipe or flick gestures.
734
735           azoteq,gesture-min-ms:
736             multipleOf: 16
737             minimum: 0
738             maximum: 496
739             description:
740               Specifies the length of time (in ms) for which a tap gesture must
741               be held in order to be acknowledged by the device.
742
743           azoteq,gesture-dist:
744             $ref: /schemas/types.yaml#/definitions/uint32
745             multipleOf: 16
746             minimum: 0
747             maximum: 4080
748             description:
749               Specifies the distance (in coordinates) across which a swipe or
750               flick gesture must travel in order to be acknowledged by the
751               device. The number specified for any one swipe or flick gesture
752               applies to all remaining swipe or flick gestures.
753
754           azoteq,gpio-select:
755             $ref: /schemas/types.yaml#/definitions/uint32-array
756             minItems: 1
757             maxItems: 3
758             items:
759               minimum: 0
760               maximum: 2
761             description: |
762               Specifies one or more GPIO mapped to the event as follows:
763               0: GPIO0
764               1: GPIO3
765               2: GPIO4
766
767               Note that although multiple events can be mapped to a single
768               GPIO, they must all be of the same type (proximity, touch or
769               slider gesture).
770
771         additionalProperties: false
772
773     required:
774       - azoteq,channel-select
775
776     additionalProperties: false
777
778   "^gpio-[0-2]$":
779     type: object
780     description: |
781       Represents a GPIO mapped to one or more events as follows:
782       gpio-0: GPIO0
783       gpio-1: GPIO3
784       gpio-2: GPIO4
785
786     allOf:
787       - $ref: ../pinctrl/pincfg-node.yaml#
788
789     properties:
790       drive-open-drain: true
791
792     additionalProperties: false
793
794 allOf:
795   - $ref: touchscreen/touchscreen.yaml#
796
797   - if:
798       properties:
799         compatible:
800           contains:
801             enum:
802               - azoteq,iqs7222a
803               - azoteq,iqs7222b
804               - azoteq,iqs7222c
805
806     then:
807       properties:
808         touchscreen-size-x: false
809         touchscreen-size-y: false
810         touchscreen-inverted-x: false
811         touchscreen-inverted-y: false
812         touchscreen-swapped-x-y: false
813
814         trackpad: false
815
816       patternProperties:
817         "^channel-([0-9]|1[0-9])$":
818           properties:
819             azoteq,counts-filt-enable: false
820
821   - if:
822       properties:
823         compatible:
824           contains:
825             enum:
826               - azoteq,iqs7222b
827               - azoteq,iqs7222c
828
829     then:
830       patternProperties:
831         "^channel-([0-9]|1[0-9])$":
832           properties:
833             azoteq,ulp-allow: false
834
835   - if:
836       properties:
837         compatible:
838           contains:
839             enum:
840               - azoteq,iqs7222b
841               - azoteq,iqs7222d
842
843     then:
844       patternProperties:
845         "^cycle-[0-9]$":
846           properties:
847             azoteq,iref-enable: false
848
849         "^channel-([0-9]|1[0-9])$":
850           properties:
851             azoteq,ref-select: false
852
853         "^slider-[0-1]$": false
854
855   - if:
856       properties:
857         compatible:
858           contains:
859             const: azoteq,iqs7222b
860
861     then:
862       patternProperties:
863         "^channel-([0-9]|1[0-9])$":
864           patternProperties:
865             "^event-(prox|touch)$":
866               properties:
867                 azoteq,gpio-select: false
868
869         "^gpio-[0-2]$": false
870
871   - if:
872       properties:
873         compatible:
874           contains:
875             const: azoteq,iqs7222a
876
877     then:
878       patternProperties:
879         "^channel-([0-9]|1[0-9])$":
880           patternProperties:
881             "^event-(prox|touch)$":
882               properties:
883                 azoteq,gpio-select:
884                   maxItems: 1
885                   items:
886                     maximum: 0
887
888         "^slider-[0-1]$":
889           properties:
890             azoteq,slider-size:
891               multipleOf: 16
892               minimum: 16
893               maximum: 4080
894
895             azoteq,top-speed:
896               multipleOf: 4
897               maximum: 1020
898
899           patternProperties:
900             "^event-(press|tap|(swipe|flick)-(pos|neg))$":
901               properties:
902                 azoteq,gpio-select:
903                   maxItems: 1
904                   items:
905                     maximum: 0
906
907     else:
908       patternProperties:
909         "^slider-[0-1]$":
910           patternProperties:
911             "^event-(press|tap|(swipe|flick)-(pos|neg))$":
912               properties:
913                 azoteq,gesture-max-ms: false
914
915                 azoteq,gesture-min-ms: false
916
917                 azoteq,gesture-dist: false
918
919 required:
920   - compatible
921   - reg
922   - irq-gpios
923
924 additionalProperties: false
925
926 examples:
927   - |
928     #include <dt-bindings/gpio/gpio.h>
929     #include <dt-bindings/input/input.h>
930
931     i2c {
932             #address-cells = <1>;
933             #size-cells = <0>;
934
935             iqs7222a@44 {
936                     compatible = "azoteq,iqs7222a";
937                     reg = <0x44>;
938                     irq-gpios = <&gpio 4 GPIO_ACTIVE_LOW>;
939                     azoteq,lta-beta-lp = <7>;
940                     azoteq,lta-beta-np = <8>;
941                     azoteq,counts-beta-lp = <2>;
942                     azoteq,counts-beta-np = <3>;
943                     azoteq,lta-fast-beta-lp = <3>;
944                     azoteq,lta-fast-beta-np = <4>;
945
946                     cycle-0 {
947                             azoteq,conv-period = <5>;
948                             azoteq,conv-frac = <127>;
949                             azoteq,tx-enable = <1>, <2>, <4>, <5>;
950                             azoteq,dead-time-enable;
951                             azoteq,sense-mode = <2>;
952                     };
953
954                     cycle-1 {
955                             azoteq,conv-period = <5>;
956                             azoteq,conv-frac = <127>;
957                             azoteq,tx-enable = <5>;
958                             azoteq,dead-time-enable;
959                             azoteq,sense-mode = <2>;
960                     };
961
962                     cycle-2 {
963                             azoteq,conv-period = <5>;
964                             azoteq,conv-frac = <127>;
965                             azoteq,tx-enable = <4>;
966                             azoteq,dead-time-enable;
967                             azoteq,sense-mode = <2>;
968                     };
969
970                     cycle-3 {
971                             azoteq,conv-period = <5>;
972                             azoteq,conv-frac = <127>;
973                             azoteq,tx-enable = <2>;
974                             azoteq,dead-time-enable;
975                             azoteq,sense-mode = <2>;
976                     };
977
978                     cycle-4 {
979                             azoteq,conv-period = <5>;
980                             azoteq,conv-frac = <127>;
981                             azoteq,tx-enable = <1>;
982                             azoteq,dead-time-enable;
983                             azoteq,sense-mode = <2>;
984                     };
985
986                     cycle-5 {
987                             azoteq,conv-period = <2>;
988                             azoteq,conv-frac = <0>;
989                     };
990
991                     cycle-6 {
992                             azoteq,conv-period = <2>;
993                             azoteq,conv-frac = <0>;
994                     };
995
996                     channel-0 {
997                             azoteq,ulp-allow;
998                             azoteq,global-halt;
999                             azoteq,invert-enable;
1000                             azoteq,rx-enable = <3>;
1001                             azoteq,ati-target = <800>;
1002                             azoteq,ati-base = <208>;
1003                             azoteq,ati-mode = <5>;
1004                     };
1005
1006                     channel-1 {
1007                             azoteq,global-halt;
1008                             azoteq,invert-enable;
1009                             azoteq,rx-enable = <3>;
1010                             azoteq,ati-target = <496>;
1011                             azoteq,ati-base = <208>;
1012                             azoteq,ati-mode = <5>;
1013                     };
1014
1015                     channel-2 {
1016                             azoteq,global-halt;
1017                             azoteq,invert-enable;
1018                             azoteq,rx-enable = <3>;
1019                             azoteq,ati-target = <496>;
1020                             azoteq,ati-base = <208>;
1021                             azoteq,ati-mode = <5>;
1022                     };
1023
1024                     channel-3 {
1025                             azoteq,global-halt;
1026                             azoteq,invert-enable;
1027                             azoteq,rx-enable = <3>;
1028                             azoteq,ati-target = <496>;
1029                             azoteq,ati-base = <208>;
1030                             azoteq,ati-mode = <5>;
1031                     };
1032
1033                     channel-4 {
1034                             azoteq,global-halt;
1035                             azoteq,invert-enable;
1036                             azoteq,rx-enable = <3>;
1037                             azoteq,ati-target = <496>;
1038                             azoteq,ati-base = <208>;
1039                             azoteq,ati-mode = <5>;
1040                     };
1041
1042                     channel-5 {
1043                             azoteq,ulp-allow;
1044                             azoteq,global-halt;
1045                             azoteq,invert-enable;
1046                             azoteq,rx-enable = <6>;
1047                             azoteq,ati-target = <800>;
1048                             azoteq,ati-base = <144>;
1049                             azoteq,ati-mode = <5>;
1050                     };
1051
1052                     channel-6 {
1053                             azoteq,global-halt;
1054                             azoteq,invert-enable;
1055                             azoteq,rx-enable = <6>;
1056                             azoteq,ati-target = <496>;
1057                             azoteq,ati-base = <160>;
1058                             azoteq,ati-mode = <5>;
1059
1060                             event-touch {
1061                                     linux,code = <KEY_MUTE>;
1062                             };
1063                     };
1064
1065                     channel-7 {
1066                             azoteq,global-halt;
1067                             azoteq,invert-enable;
1068                             azoteq,rx-enable = <6>;
1069                             azoteq,ati-target = <496>;
1070                             azoteq,ati-base = <160>;
1071                             azoteq,ati-mode = <5>;
1072
1073                             event-touch {
1074                                     linux,code = <KEY_VOLUMEDOWN>;
1075                             };
1076                     };
1077
1078                     channel-8 {
1079                             azoteq,global-halt;
1080                             azoteq,invert-enable;
1081                             azoteq,rx-enable = <6>;
1082                             azoteq,ati-target = <496>;
1083                             azoteq,ati-base = <160>;
1084                             azoteq,ati-mode = <5>;
1085
1086                             event-touch {
1087                                     linux,code = <KEY_VOLUMEUP>;
1088                             };
1089                     };
1090
1091                     channel-9 {
1092                             azoteq,global-halt;
1093                             azoteq,invert-enable;
1094                             azoteq,rx-enable = <6>;
1095                             azoteq,ati-target = <496>;
1096                             azoteq,ati-base = <160>;
1097                             azoteq,ati-mode = <5>;
1098
1099                             event-touch {
1100                                     linux,code = <KEY_POWER>;
1101                             };
1102                     };
1103
1104                     channel-10 {
1105                             azoteq,ulp-allow;
1106                             azoteq,ati-target = <496>;
1107                             azoteq,ati-base = <112>;
1108
1109                             event-touch {
1110                                     linux,code = <SW_LID>;
1111                                     linux,input-type = <EV_SW>;
1112                             };
1113                     };
1114
1115                     channel-11 {
1116                             azoteq,ati-target = <496>;
1117                             azoteq,ati-base = <112>;
1118                     };
1119
1120                     slider-0 {
1121                             azoteq,channel-select = <1>, <2>, <3>, <4>;
1122                             azoteq,slider-size = <4080>;
1123                             azoteq,upper-cal = <50>;
1124                             azoteq,lower-cal = <30>;
1125                             azoteq,top-speed = <200>;
1126                             azoteq,bottom-speed = <1>;
1127                             azoteq,bottom-beta = <3>;
1128
1129                             event-tap {
1130                                     linux,code = <KEY_PLAYPAUSE>;
1131                                     azoteq,gesture-max-ms = <400>;
1132                                     azoteq,gesture-min-ms = <32>;
1133                             };
1134
1135                             event-flick-pos {
1136                                     linux,code = <KEY_NEXTSONG>;
1137                                     azoteq,gesture-max-ms = <800>;
1138                                     azoteq,gesture-dist = <800>;
1139                             };
1140
1141                             event-flick-neg {
1142                                     linux,code = <KEY_PREVIOUSSONG>;
1143                             };
1144                     };
1145             };
1146     };
1147
1148 ...