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 - 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 i2c0 { 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 spi0 { 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 spi0 { 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... 323