1# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/input/microchip,cap11xx.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: Microchip CAP11xx based capacitive touch sensors
8
9description: |
10  The Microchip CAP1xxx Family of RightTouchTM multiple-channel capacitive
11  touch controllers and LED drivers. The device communication via I2C only.
12
13maintainers:
14  - Rob Herring <robh@kernel.org>
15
16properties:
17  compatible:
18    enum:
19      - microchip,cap1106
20      - microchip,cap1126
21      - microchip,cap1188
22      - microchip,cap1203
23      - microchip,cap1206
24      - microchip,cap1293
25      - microchip,cap1298
26
27  reg:
28    maxItems: 1
29
30  '#address-cells':
31    const: 1
32
33  '#size-cells':
34    const: 0
35
36  interrupts:
37    maxItems: 1
38    description: |
39      Property describing the interrupt line the
40      device's ALERT#/CM_IRQ# pin is connected to.
41      The device only has one interrupt source.
42
43  autorepeat:
44    description: |
45      Enables the Linux input system's autorepeat feature on the input device.
46
47  linux,keycodes:
48    minItems: 3
49    maxItems: 8
50    description: |
51      Specifies an array of numeric keycode values to
52      be used for the channels. If this property is
53      omitted, KEY_A, KEY_B, etc are used as defaults.
54      The number of entries must correspond to the number of channels.
55
56  microchip,sensor-gain:
57    $ref: /schemas/types.yaml#/definitions/uint32
58    default: 1
59    enum: [1, 2, 4, 8]
60    description: |
61      Defines the gain of the sensor circuitry. This
62      effectively controls the sensitivity, as a
63      smaller delta capacitance is required to
64      generate the same delta count values.
65
66  microchip,irq-active-high:
67    type: boolean
68    description: |
69      By default the interrupt pin is active low
70      open drain. This property allows using the active
71      high push-pull output.
72
73  microchip,sensitivity-delta-sense:
74    $ref: /schemas/types.yaml#/definitions/uint32
75    default: 32
76    enum: [1, 2, 4, 8, 16, 32, 64, 128]
77    description:
78      Controls the sensitivity multiplier of a touch detection.
79      Higher value means more sensitive settings.
80      At the more sensitive settings, touches are detected for a smaller delta
81      capacitance corresponding to a "lighter" touch.
82
83  microchip,signal-guard:
84    $ref: /schemas/types.yaml#/definitions/uint32-array
85    minItems: 3
86    maxItems: 8
87    items:
88      enum: [0, 1]
89    description: |
90      0 - off
91      1 - on
92      The signal guard isolates the signal from virtual grounds.
93      If enabled then the behavior of the channel is changed to signal guard.
94      The number of entries must correspond to the number of channels.
95
96  microchip,input-threshold:
97    $ref: /schemas/types.yaml#/definitions/uint32-array
98    minItems: 3
99    maxItems: 8
100    items:
101      minimum: 0
102      maximum: 127
103    description:
104      Specifies the delta threshold that is used to determine if a touch has
105      been detected. A higher value means a larger difference in capacitance
106      is required for a touch to be registered, making the touch sensor less
107      sensitive.
108      The number of entries must correspond to the number of channels.
109
110  microchip,calib-sensitivity:
111    $ref: /schemas/types.yaml#/definitions/uint32-array
112    minItems: 3
113    maxItems: 8
114    items:
115      enum: [1, 2, 4]
116    description: |
117      Specifies an array of numeric values that controls the gain
118      used by the calibration routine to enable sensor inputs
119      to be more sensitive for proximity detection.
120      Gain is based on touch pad capacitance range
121      1 - 5-50pF
122      2 - 0-25pF
123      4 - 0-12.5pF
124      The number of entries must correspond to the number of channels.
125
126patternProperties:
127  "^led@[0-7]$":
128    type: object
129    description: CAP11xx LEDs
130    $ref: /schemas/leds/common.yaml#
131
132    properties:
133      reg:
134        enum: [0, 1, 2, 3, 4, 5, 6, 7]
135
136      label: true
137
138      linux,default-trigger: true
139
140      default-state: true
141
142    required:
143      - reg
144
145    additionalProperties: false
146
147allOf:
148  - $ref: input.yaml
149  - if:
150      properties:
151        compatible:
152          contains:
153            enum:
154              - microchip,cap1106
155              - microchip,cap1203
156              - microchip,cap1206
157              - microchip,cap1293
158              - microchip,cap1298
159    then:
160      patternProperties:
161        "^led@[0-7]$": false
162
163  - if:
164      properties:
165        compatible:
166          contains:
167            enum:
168              - microchip,cap1106
169              - microchip,cap1126
170              - microchip,cap1188
171              - microchip,cap1203
172              - microchip,cap1206
173    then:
174      properties:
175        microchip,signal-guard: false
176        microchip,calib-sensitivity: false
177
178required:
179  - compatible
180  - interrupts
181
182additionalProperties: false
183
184examples:
185  - |
186    i2c {
187      #address-cells = <1>;
188      #size-cells = <0>;
189
190      touch@28 {
191        compatible = "microchip,cap1188";
192        interrupt-parent = <&gpio1>;
193        interrupts = <0 0>;
194        reg = <0x28>;
195        autorepeat;
196        microchip,sensor-gain = <2>;
197        microchip,sensitivity-delta-sense = <16>;
198        microchip,input-threshold = <21>, <18>, <46>, <46>, <46>, <21>;
199
200        linux,keycodes = <103>,	/* KEY_UP */
201                         <106>,	/* KEY_RIGHT */
202                         <108>,	/* KEY_DOWN */
203                         <105>,	/* KEY_LEFT */
204                         <109>,	/* KEY_PAGEDOWN */
205                         <104>;	/* KEY_PAGEUP */
206
207        #address-cells = <1>;
208        #size-cells = <0>;
209
210        led@0 {
211                label = "cap11xx:green:usr0";
212                reg = <0>;
213        };
214
215        led@1 {
216                label = "cap11xx:green:usr1";
217                reg = <1>;
218        };
219
220        led@2 {
221                label = "cap11xx:green:alive";
222                reg = <2>;
223                linux,default-trigger = "heartbeat";
224        };
225      };
226    };
227