blob: e1ca4f297c6d818f528ed1aec779c6687f85e40b [file] [log] [blame]
Tom Rini53633a82024-02-29 12:33:36 -05001# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/mfd/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 typec:
97 $ref: /schemas/chrome/google,cros-ec-typec.yaml#
98
99 ec-pwm:
100 $ref: /schemas/pwm/google,cros-ec-pwm.yaml#
101 deprecated: true
102
103 pwm:
104 $ref: /schemas/pwm/google,cros-ec-pwm.yaml#
105
106 kbd-led-backlight:
107 $ref: /schemas/chrome/google,cros-kbd-led-backlight.yaml#
108
109 keyboard-controller:
110 $ref: /schemas/input/google,cros-ec-keyb.yaml#
111
112 proximity:
113 $ref: /schemas/iio/proximity/google,cros-ec-mkbp-proximity.yaml#
114
115 codecs:
116 type: object
117 additionalProperties: false
118
119 properties:
120 '#address-cells':
121 const: 2
122
123 '#size-cells':
124 const: 1
125
126 patternProperties:
127 "^ec-codec@[a-f0-9]+$":
128 type: object
129 $ref: /schemas/sound/google,cros-ec-codec.yaml#
130
131 required:
132 - "#address-cells"
133 - "#size-cells"
134
135 cbas:
136 type: object
137
138 description:
139 This device is used to signal when a detachable base is attached
140 to a Chrome OS tablet. This device cannot be detected at runtime.
141
142 properties:
143 compatible:
144 const: google,cros-cbas
145
146 required:
147 - compatible
148
149 additionalProperties: false
150
151patternProperties:
152 "^i2c-tunnel[0-9]*$":
153 type: object
154 $ref: /schemas/i2c/google,cros-ec-i2c-tunnel.yaml#
155
156 "^regulator@[0-9]+$":
157 type: object
158 $ref: /schemas/regulator/google,cros-ec-regulator.yaml#
159
160 "^extcon[0-9]*$":
161 type: object
162 $ref: /schemas/extcon/extcon-usbc-cros-ec.yaml#
163
164required:
165 - compatible
166
167allOf:
168 - if:
169 properties:
170 compatible:
171 not:
172 contains:
173 const: google,cros-ec-spi
174 then:
175 properties:
176 controller-data: false
177 google,cros-ec-spi-pre-delay: false
178 google,cros-ec-spi-msg-delay: false
179 spi-max-frequency: false
180 else:
181 $ref: /schemas/spi/spi-peripheral-props.yaml
182
183 - if:
184 properties:
185 compatible:
186 not:
187 contains:
188 const: google,cros-ec-rpmsg
189 then:
190 properties:
191 mediatek,rpmsg-name: false
192
193 - if:
194 properties:
195 compatible:
196 not:
197 contains:
198 enum:
199 - google,cros-ec-rpmsg
200 - google,cros-ec-uart
201 then:
202 required:
203 - reg
204 - interrupts
205
206 - if:
207 properties:
208 compatible:
209 contains:
210 const: google,cros-ec-fp
211 then:
212 properties:
213 '#address-cells': false
214 '#size-cells': false
215 typec: false
216 ec-pwm: false
217 kbd-led-backlight: false
218 keyboard-controller: false
219 proximity: false
220 codecs: false
221 cbas: false
222
223 patternProperties:
224 "^i2c-tunnel[0-9]*$": false
225 "^regulator@[0-9]+$": false
226 "^extcon[0-9]*$": false
227
228 # Using additionalProperties: false here and
229 # listing true properties doesn't work
230
231 required:
232 - reset-gpios
233 - boot0-gpios
234 - vdd-supply
235 else:
236 properties:
237 reset-gpios: false
238 boot0-gpios: false
239 vdd-supply: false
240
241additionalProperties: false
242
243examples:
244 # Example for I2C
245 - |
246 #include <dt-bindings/gpio/gpio.h>
247 #include <dt-bindings/interrupt-controller/irq.h>
248
249 i2c {
250 #address-cells = <1>;
251 #size-cells = <0>;
252
253 cros-ec@1e {
254 compatible = "google,cros-ec-i2c";
255 reg = <0x1e>;
256 interrupts = <6 0>;
257 interrupt-parent = <&gpio0>;
258 };
259 };
260
261 # Example for SPI
262 - |
263 #include <dt-bindings/gpio/gpio.h>
264 #include <dt-bindings/interrupt-controller/irq.h>
265
266 spi {
267 #address-cells = <1>;
268 #size-cells = <0>;
269
270 cros-ec@0 {
271 compatible = "google,cros-ec-spi";
272 reg = <0x0>;
273 google,cros-ec-spi-msg-delay = <30>;
274 google,cros-ec-spi-pre-delay = <10>;
275 interrupts = <99 0>;
276 interrupt-parent = <&gpio7>;
277 spi-max-frequency = <5000000>;
278
279 proximity {
280 compatible = "google,cros-ec-mkbp-proximity";
281 };
282
283 cbas {
284 compatible = "google,cros-cbas";
285 };
286 };
287 };
288
289 # Example for RPMSG
290 - |
291 scp0 {
292 cros-ec {
293 compatible = "google,cros-ec-rpmsg";
294 };
295 };
296
297 # Example for FPMCU
298 - |
299 spi {
300 #address-cells = <0x1>;
301 #size-cells = <0x0>;
302
303 ec@0 {
304 compatible = "google,cros-ec-fp", "google,cros-ec-spi";
305 reg = <0x0>;
306 interrupt-parent = <&gpio_controller>;
307 interrupts = <4 IRQ_TYPE_LEVEL_LOW>;
308 spi-max-frequency = <3000000>;
309 reset-gpios = <&gpio_controller 5 GPIO_ACTIVE_LOW>;
310 boot0-gpios = <&gpio_controller 10 GPIO_ACTIVE_HIGH>;
311 vdd-supply = <&pp3300_fp_mcu>;
312 };
313 };
314
315 # Example for UART
316 - |
317 serial {
318 cros-ec {
319 compatible = "google,cros-ec-uart";
320 };
321 };
322...