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
7title: Azoteq IQS7222A/B/C/D Capacitive Touch Controller
8
9maintainers:
10  - Jeff LaBundy <jeff@labundy.com>
11
12description: |
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
18properties:
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
323patternProperties:
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: /schemas/pinctrl/pincfg-node.yaml#
788
789    properties:
790      drive-open-drain: true
791
792    additionalProperties: false
793
794allOf:
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
919required:
920  - compatible
921  - reg
922  - irq-gpios
923
924additionalProperties: false
925
926examples:
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...
1149