Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/embedded-controller/google,cros-ec.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: ChromeOS Embedded Controller
8
9maintainers:
10 - Benson Leung <bleung@chromium.org>
11 - Guenter Roeck <groeck@chromium.org>
12
13description:
14 Google's ChromeOS EC is a microcontroller which talks to the AP and
15 implements various functions such as keyboard and battery charging.
16 The EC can be connected through various interfaces (I2C, SPI, and others)
17 and the compatible string specifies which interface is being used.
18
19properties:
20 compatible:
21 oneOf:
22 - description:
23 For implementations of the EC connected through I2C.
24 const: google,cros-ec-i2c
25 - description:
26 For implementations of the EC connected through SPI.
27 const: google,cros-ec-spi
28 - description:
29 For implementations of the FPMCU connected through SPI.
30 items:
31 - const: google,cros-ec-fp
32 - const: google,cros-ec-spi
33 - description:
34 For implementations of the EC connected through RPMSG.
35 const: google,cros-ec-rpmsg
36 - description:
37 For implementations of the EC connected through UART.
38 const: google,cros-ec-uart
39
40 controller-data: true
41
42 google,cros-ec-spi-pre-delay:
43 description:
44 This property specifies the delay in usecs between the
45 assertion of the CS and the first clock pulse.
46 $ref: /schemas/types.yaml#/definitions/uint32
47 default: 0
48
49 google,cros-ec-spi-msg-delay:
50 description:
51 This property specifies the delay in usecs between messages.
52 $ref: /schemas/types.yaml#/definitions/uint32
53 default: 0
54
55 google,has-vbc-nvram:
56 description:
57 Some implementations of the EC include a small nvram space used to
58 store verified boot context data. This boolean flag is used to specify
59 whether this nvram is present or not.
60 type: boolean
61
62 mediatek,rpmsg-name:
63 description:
64 Must be defined if the cros-ec is a rpmsg device for a Mediatek
65 ARM Cortex M4 Co-processor. Contains the name of the rpmsg
66 device. Used to match the subnode to the rpmsg device announced by
67 the SCP.
68 $ref: /schemas/types.yaml#/definitions/string
69
70 spi-max-frequency: true
71
72 reg:
73 maxItems: 1
74
75 interrupts:
76 maxItems: 1
77
78 reset-gpios:
79 maxItems: 1
80
81 boot0-gpios:
82 maxItems: 1
83 description: Assert for bootloader mode.
84
85 vdd-supply: true
86
87 wakeup-source:
88 description: Button can wake-up the system.
89
90 '#address-cells':
91 const: 1
92
93 '#size-cells':
94 const: 0
95
96 '#gpio-cells':
97 const: 2
98
99 gpio-controller: true
100
101 typec:
102 $ref: /schemas/chrome/google,cros-ec-typec.yaml#
103
104 ec-pwm:
105 $ref: /schemas/pwm/google,cros-ec-pwm.yaml#
106 deprecated: true
107
108 pwm:
109 $ref: /schemas/pwm/google,cros-ec-pwm.yaml#
110
111 keyboard-controller:
112 $ref: /schemas/input/google,cros-ec-keyb.yaml#
113
114 proximity:
115 $ref: /schemas/iio/proximity/google,cros-ec-mkbp-proximity.yaml#
116
117 codecs:
118 type: object
119 additionalProperties: false
120
121 properties:
122 '#address-cells':
123 const: 2
124
125 '#size-cells':
126 const: 1
127
128 patternProperties:
129 "^ec-codec@[a-f0-9]+$":
130 type: object
131 $ref: /schemas/sound/google,cros-ec-codec.yaml#
132
133 required:
134 - "#address-cells"
135 - "#size-cells"
136
137 cbas:
138 type: object
139
140 description:
141 This device is used to signal when a detachable base is attached
142 to a Chrome OS tablet. This device cannot be detected at runtime.
143
144 properties:
145 compatible:
146 const: google,cros-cbas
147
148 required:
149 - compatible
150
151 additionalProperties: false
152
153patternProperties:
154 "^i2c-tunnel[0-9]*$":
155 type: object
156 $ref: /schemas/i2c/google,cros-ec-i2c-tunnel.yaml#
157
158 "^regulator@[0-9]+$":
159 type: object
160 $ref: /schemas/regulator/google,cros-ec-regulator.yaml#
161
162 "^extcon[0-9]*$":
163 type: object
164 $ref: /schemas/extcon/extcon-usbc-cros-ec.yaml#
165
166required:
167 - compatible
168
169allOf:
170 - if:
171 properties:
172 compatible:
173 not:
174 contains:
175 const: google,cros-ec-spi
176 then:
177 properties:
178 controller-data: false
179 google,cros-ec-spi-pre-delay: false
180 google,cros-ec-spi-msg-delay: false
181 spi-max-frequency: false
182 else:
183 $ref: /schemas/spi/spi-peripheral-props.yaml
184
185 - if:
186 properties:
187 compatible:
188 not:
189 contains:
190 const: google,cros-ec-rpmsg
191 then:
192 properties:
193 mediatek,rpmsg-name: false
194
195 - if:
196 properties:
197 compatible:
198 not:
199 contains:
200 enum:
201 - google,cros-ec-rpmsg
202 - google,cros-ec-uart
203 then:
204 required:
205 - reg
206 - interrupts
207
208 - if:
209 properties:
210 compatible:
211 contains:
212 const: google,cros-ec-fp
213 then:
214 properties:
215 '#address-cells': false
216 '#size-cells': false
217 typec: false
218 ec-pwm: false
219 kbd-led-backlight: false
220 keyboard-controller: false
221 proximity: false
222 codecs: false
223 cbas: false
224
225 patternProperties:
226 "^i2c-tunnel[0-9]*$": false
227 "^regulator@[0-9]+$": false
228 "^extcon[0-9]*$": false
229
230 # Using additionalProperties: false here and
231 # listing true properties doesn't work
232
233 required:
234 - reset-gpios
235 - boot0-gpios
236 - vdd-supply
237 else:
238 properties:
239 reset-gpios: false
240 boot0-gpios: false
241 vdd-supply: false
242
243additionalProperties: false
244
245examples:
246 # Example for I2C
247 - |
248 #include <dt-bindings/gpio/gpio.h>
249 #include <dt-bindings/interrupt-controller/irq.h>
250
251 i2c {
252 #address-cells = <1>;
253 #size-cells = <0>;
254
255 cros-ec@1e {
256 compatible = "google,cros-ec-i2c";
257 reg = <0x1e>;
258 interrupts = <6 0>;
259 interrupt-parent = <&gpio0>;
260 };
261 };
262
263 # Example for SPI
264 - |
265 #include <dt-bindings/gpio/gpio.h>
266 #include <dt-bindings/interrupt-controller/irq.h>
267
268 spi {
269 #address-cells = <1>;
270 #size-cells = <0>;
271
272 cros-ec@0 {
273 compatible = "google,cros-ec-spi";
274 reg = <0x0>;
275 google,cros-ec-spi-msg-delay = <30>;
276 google,cros-ec-spi-pre-delay = <10>;
277 interrupts = <99 0>;
278 interrupt-parent = <&gpio7>;
279 spi-max-frequency = <5000000>;
280 #gpio-cells = <2>;
281 gpio-controller;
282
283 proximity {
284 compatible = "google,cros-ec-mkbp-proximity";
285 };
286
287 cbas {
288 compatible = "google,cros-cbas";
289 };
290 };
291 };
292
293 # Example for RPMSG
294 - |
295 scp0 {
296 cros-ec {
297 compatible = "google,cros-ec-rpmsg";
298 };
299 };
300
301 # Example for FPMCU
302 - |
303 spi {
304 #address-cells = <0x1>;
305 #size-cells = <0x0>;
306
307 ec@0 {
308 compatible = "google,cros-ec-fp", "google,cros-ec-spi";
309 reg = <0x0>;
310 interrupt-parent = <&gpio_controller>;
311 interrupts = <4 IRQ_TYPE_LEVEL_LOW>;
312 spi-max-frequency = <3000000>;
313 reset-gpios = <&gpio_controller 5 GPIO_ACTIVE_LOW>;
314 boot0-gpios = <&gpio_controller 10 GPIO_ACTIVE_HIGH>;
315 vdd-supply = <&pp3300_fp_mcu>;
316 };
317 };
318
319 # Example for UART
320 - |
321 serial {
322 cros-ec {
323 compatible = "google,cros-ec-uart";
324 };
325 };
326...