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  codecs:
98    type: object
99    additionalProperties: false
100
101    properties:
102      '#address-cells':
103        const: 2
104
105      '#size-cells':
106        const: 1
107
108    patternProperties:
109      "^ec-codec@[a-f0-9]+$":
110        type: object
111        $ref: "/schemas/sound/google,cros-ec-codec.yaml#"
112
113    required:
114      - "#address-cells"
115      - "#size-cells"
116
117patternProperties:
118  "^i2c-tunnel[0-9]*$":
119    type: object
120    $ref: "/schemas/i2c/google,cros-ec-i2c-tunnel.yaml#"
121
122  "^regulator@[0-9]+$":
123    type: object
124    $ref: "/schemas/regulator/google,cros-ec-regulator.yaml#"
125
126  "^extcon[0-9]*$":
127    type: object
128    $ref: "/schemas/extcon/extcon-usbc-cros-ec.yaml#"
129
130required:
131  - compatible
132
133if:
134  properties:
135    compatible:
136      contains:
137        enum:
138          - google,cros-ec-i2c
139          - google,cros-ec-rpmsg
140then:
141  properties:
142    google,cros-ec-spi-pre-delay: false
143    google,cros-ec-spi-msg-delay: false
144    spi-max-frequency: false
145
146additionalProperties: false
147
148examples:
149  # Example for I2C
150  - |
151    #include <dt-bindings/gpio/gpio.h>
152    #include <dt-bindings/interrupt-controller/irq.h>
153
154    i2c0 {
155        #address-cells = <1>;
156        #size-cells = <0>;
157
158        cros-ec@1e {
159            compatible = "google,cros-ec-i2c";
160            reg = <0x1e>;
161            interrupts = <6 0>;
162            interrupt-parent = <&gpio0>;
163        };
164    };
165
166  # Example for SPI
167  - |
168    #include <dt-bindings/gpio/gpio.h>
169    #include <dt-bindings/interrupt-controller/irq.h>
170
171    spi0 {
172        #address-cells = <1>;
173        #size-cells = <0>;
174
175        cros-ec@0 {
176            compatible = "google,cros-ec-spi";
177            reg = <0x0>;
178            google,cros-ec-spi-msg-delay = <30>;
179            google,cros-ec-spi-pre-delay = <10>;
180            interrupts = <99 0>;
181            interrupt-parent = <&gpio7>;
182            spi-max-frequency = <5000000>;
183        };
184    };
185
186  # Example for RPMSG
187  - |
188    scp0 {
189        cros-ec {
190            compatible = "google,cros-ec-rpmsg";
191        };
192    };
193...
194