1# 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  - Enric Balletbo i Serra <enric.balletbo@collabora.com>
12  - Guenter Roeck <groeck@chromium.org>
13
14description:
15  Google's ChromeOS EC is a microcontroller which talks to the AP and
16  implements various functions such as keyboard and battery charging.
17  The EC can be connected through various interfaces (I2C, SPI, and others)
18  and the compatible string specifies which interface is being used.
19
20properties:
21  compatible:
22    oneOf:
23      - description:
24          For implementations of the EC is connected through I2C.
25        const: google,cros-ec-i2c
26      - description:
27          For implementations of the EC is connected through SPI.
28        const: google,cros-ec-spi
29      - description:
30          For implementations of the EC is connected through RPMSG.
31        const: google,cros-ec-rpmsg
32
33  controller-data:
34    description:
35      SPI controller data, see bindings/spi/spi-samsung.txt
36    type: object
37
38  google,cros-ec-spi-pre-delay:
39    description:
40      This property specifies the delay in usecs between the
41      assertion of the CS and the first clock pulse.
42    allOf:
43      - $ref: /schemas/types.yaml#/definitions/uint32
44      - default: 0
45      - minimum: 0
46
47  google,cros-ec-spi-msg-delay:
48    description:
49      This property specifies the delay in usecs between messages.
50    allOf:
51      - $ref: /schemas/types.yaml#/definitions/uint32
52      - default: 0
53      - minimum: 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  mtk,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 pf 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:
71    description: Maximum SPI frequency of the device in Hz.
72
73  reg:
74    maxItems: 1
75
76  interrupts:
77    maxItems: 1
78
79  wakeup-source:
80    description: Button can wake-up the system.
81
82  '#address-cells':
83    const: 1
84
85  '#size-cells':
86    const: 0
87
88  typec:
89    $ref: "/schemas/chrome/google,cros-ec-typec.yaml#"
90
91  ec-pwm:
92    $ref: "/schemas/pwm/google,cros-ec-pwm.yaml#"
93
94  keyboard-controller:
95    $ref: "/schemas/input/google,cros-ec-keyb.yaml#"
96
97  proximity:
98    $ref: "/schemas/iio/proximity/google,cros-ec-mkbp-proximity.yaml#"
99
100  codecs:
101    type: object
102    additionalProperties: false
103
104    properties:
105      '#address-cells':
106        const: 2
107
108      '#size-cells':
109        const: 1
110
111    patternProperties:
112      "^ec-codec@[a-f0-9]+$":
113        type: object
114        $ref: "/schemas/sound/google,cros-ec-codec.yaml#"
115
116    required:
117      - "#address-cells"
118      - "#size-cells"
119
120patternProperties:
121  "^i2c-tunnel[0-9]*$":
122    type: object
123    $ref: "/schemas/i2c/google,cros-ec-i2c-tunnel.yaml#"
124
125  "^regulator@[0-9]+$":
126    type: object
127    $ref: "/schemas/regulator/google,cros-ec-regulator.yaml#"
128
129  "^extcon[0-9]*$":
130    type: object
131    $ref: "/schemas/extcon/extcon-usbc-cros-ec.yaml#"
132
133required:
134  - compatible
135
136if:
137  properties:
138    compatible:
139      contains:
140        enum:
141          - google,cros-ec-i2c
142          - google,cros-ec-rpmsg
143then:
144  properties:
145    google,cros-ec-spi-pre-delay: false
146    google,cros-ec-spi-msg-delay: false
147    spi-max-frequency: false
148
149additionalProperties: false
150
151examples:
152  # Example for I2C
153  - |
154    #include <dt-bindings/gpio/gpio.h>
155    #include <dt-bindings/interrupt-controller/irq.h>
156
157    i2c0 {
158        #address-cells = <1>;
159        #size-cells = <0>;
160
161        cros-ec@1e {
162            compatible = "google,cros-ec-i2c";
163            reg = <0x1e>;
164            interrupts = <6 0>;
165            interrupt-parent = <&gpio0>;
166        };
167    };
168
169  # Example for SPI
170  - |
171    #include <dt-bindings/gpio/gpio.h>
172    #include <dt-bindings/interrupt-controller/irq.h>
173
174    spi0 {
175        #address-cells = <1>;
176        #size-cells = <0>;
177
178        cros-ec@0 {
179            compatible = "google,cros-ec-spi";
180            reg = <0x0>;
181            google,cros-ec-spi-msg-delay = <30>;
182            google,cros-ec-spi-pre-delay = <10>;
183            interrupts = <99 0>;
184            interrupt-parent = <&gpio7>;
185            spi-max-frequency = <5000000>;
186
187            proximity {
188                    compatible = "google,cros-ec-mkbp-proximity";
189            };
190        };
191    };
192
193  # Example for RPMSG
194  - |
195    scp0 {
196        cros-ec {
197            compatible = "google,cros-ec-rpmsg";
198        };
199    };
200...
201