1# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause 2%YAML 1.2 3--- 4$id: http://devicetree.org/schemas/leds/leds-bcm6328.yaml# 5$schema: http://devicetree.org/meta-schemas/core.yaml# 6 7title: LEDs connected to Broadcom BCM6328 controller 8 9maintainers: 10 - Álvaro Fernández Rojas <noltari@gmail.com> 11 12description: | 13 This controller is present on BCM6318, BCM6328, BCM6362 and BCM63268. 14 In these SoCs it's possible to control LEDs both as GPIOs or by hardware. 15 However, on some devices there are Serial LEDs (LEDs connected to a 74x164 16 controller), which can either be controlled by software (exporting the 74x164 17 as spi-gpio. See 18 Documentation/devicetree/bindings/gpio/fairchild,74hc595.yaml), or by hardware 19 using this driver. 20 Some of these Serial LEDs are hardware controlled (e.g. ethernet LEDs) and 21 exporting the 74x164 as spi-gpio prevents those LEDs to be hardware 22 controlled, so the only chance to keep them working is by using this driver. 23 24 BCM6328 LED controller has a HWDIS register, which controls whether a LED 25 should be controlled by a hardware signal instead of the MODE register value, 26 with 0 meaning hardware control enabled and 1 hardware control disabled. This 27 is usually 1:1 for hardware to LED signals, but through the activity/link 28 registers you have some limited control over rerouting the LEDs (as 29 explained later in brcm,link-signal-sources). Even if a LED is hardware 30 controlled you are still able to make it blink or light it up if it isn't, 31 but you can't turn it off if the hardware decides to light it up. For this 32 reason, hardware controlled LEDs aren't registered as LED class devices. 33 34 Each LED is represented as a sub-node of the brcm,bcm6328-leds device. 35 36properties: 37 compatible: 38 const: brcm,bcm6328-leds 39 40 reg: 41 maxItems: 1 42 43 brcm,serial-leds: 44 type: boolean 45 description: Enables Serial LEDs. 46 47 brcm,serial-mux: 48 type: boolean 49 description: Enables Serial LEDs multiplexing. 50 51 brcm,serial-clk-low: 52 type: boolean 53 description: Makes clock signal active low. 54 55 brcm,serial-dat-low: 56 type: boolean 57 description: Makes data signal active low. 58 59 brcm,serial-shift-inv: 60 type: boolean 61 description: Inverts Serial LEDs shift direction. 62 63 "#address-cells": 64 const: 1 65 66 "#size-cells": 67 const: 0 68 69patternProperties: 70 "@[a-f0-9]+$": 71 type: object 72 73 $ref: common.yaml# 74 75 properties: 76 reg: 77 items: 78 - maximum: 23 79 description: LED pin number (only LEDs 0 to 23 are valid). 80 81 brcm,hardware-controlled: 82 type: boolean 83 description: Makes this LED hardware controlled. 84 85 brcm,link-signal-sources: 86 $ref: /schemas/types.yaml#/definitions/uint32-array 87 minItems: 1 88 maxItems: 4 89 description: > 90 An array of hardware link signal sources. Up to four link hardware 91 signals can get muxed into these LEDs. Only valid for LEDs 0 to 7, 92 where LED signals 0 to 3 may be muxed to LEDs 0 to 3, and signals 4 to 93 7 may be muxed to LEDs 4 to 7. A signal can be muxed to more than one 94 LED, and one LED can have more than one source signal. 95 96 brcm,activity-signal-sources: 97 $ref: /schemas/types.yaml#/definitions/uint32-array 98 minItems: 1 99 maxItems: 4 100 description: > 101 An array of hardware activity signal sources. Up to four activity 102 hardware signals can get muxed into these LEDs. Only valid for LEDs 0 103 to 7, where LED signals 0 to 3 may be muxed to LEDs 0 to 3, and 104 signals 4 to 7 may be muxed to LEDs 4 to 7. A signal can be muxed to 105 more than one LED, and one LED can have more than one source signal. 106 107 required: 108 - reg 109 110 unevaluatedProperties: false 111 112required: 113 - reg 114 - "#address-cells" 115 - "#size-cells" 116 117additionalProperties: false 118 119examples: 120 - | 121 /* BCM6328 with 4 EPHY LEDs */ 122 led-controller@10000800 { 123 compatible = "brcm,bcm6328-leds"; 124 #address-cells = <1>; 125 #size-cells = <0>; 126 reg = <0x10000800 0x24>; 127 128 alarm_red@2 { 129 reg = <2>; 130 active-low; 131 label = "red:alarm"; 132 }; 133 134 inet_green@3 { 135 reg = <3>; 136 active-low; 137 label = "green:inet"; 138 }; 139 140 power_green@4 { 141 reg = <4>; 142 active-low; 143 label = "green:power"; 144 default-state = "on"; 145 }; 146 147 ephy0_spd@17 { 148 reg = <17>; 149 brcm,hardware-controlled; 150 }; 151 152 ephy1_spd@18 { 153 reg = <18>; 154 brcm,hardware-controlled; 155 }; 156 157 ephy2_spd@19 { 158 reg = <19>; 159 brcm,hardware-controlled; 160 }; 161 162 ephy3_spd@20 { 163 reg = <20>; 164 brcm,hardware-controlled; 165 }; 166 }; 167 - | 168 /* BCM63268 with Serial/GPHY0 LEDs */ 169 led-controller@10001900 { 170 compatible = "brcm,bcm6328-leds"; 171 #address-cells = <1>; 172 #size-cells = <0>; 173 reg = <0x10001900 0x24>; 174 brcm,serial-leds; 175 brcm,serial-dat-low; 176 brcm,serial-shift-inv; 177 178 gphy0_spd0@0 { 179 reg = <0>; 180 brcm,hardware-controlled; 181 brcm,link-signal-sources = <0>; 182 }; 183 184 gphy0_spd1@1 { 185 reg = <1>; 186 brcm,hardware-controlled; 187 brcm,link-signal-sources = <1>; 188 }; 189 190 inet_red@2 { 191 reg = <2>; 192 active-low; 193 label = "red:inet"; 194 }; 195 196 dsl_green@3 { 197 reg = <3>; 198 active-low; 199 label = "green:dsl"; 200 }; 201 202 usb_green@4 { 203 reg = <4>; 204 active-low; 205 label = "green:usb"; 206 }; 207 208 wps_green@7 { 209 reg = <7>; 210 active-low; 211 label = "green:wps"; 212 }; 213 214 inet_green@8 { 215 reg = <8>; 216 active-low; 217 label = "green:inet"; 218 }; 219 220 ephy0_act@9 { 221 reg = <9>; 222 brcm,hardware-controlled; 223 }; 224 225 ephy1_act@10 { 226 reg = <10>; 227 brcm,hardware-controlled; 228 }; 229 230 ephy2_act@11 { 231 reg = <11>; 232 brcm,hardware-controlled; 233 }; 234 235 gphy0_act@12 { 236 reg = <12>; 237 brcm,hardware-controlled; 238 }; 239 240 ephy0_spd@13 { 241 reg = <13>; 242 brcm,hardware-controlled; 243 }; 244 245 ephy1_spd@14 { 246 reg = <14>; 247 brcm,hardware-controlled; 248 }; 249 250 ephy2_spd@15 { 251 reg = <15>; 252 brcm,hardware-controlled; 253 }; 254 255 power_green@20 { 256 reg = <20>; 257 active-low; 258 label = "green:power"; 259 default-state = "on"; 260 }; 261 }; 262 - | 263 /* BCM6362 with 1 LED for each EPHY */ 264 led-controller@10001900 { 265 compatible = "brcm,bcm6328-leds"; 266 #address-cells = <1>; 267 #size-cells = <0>; 268 reg = <0x10001900 0x24>; 269 270 usb@0 { 271 reg = <0>; 272 brcm,hardware-controlled; 273 brcm,link-signal-sources = <0>; 274 brcm,activity-signal-sources = <0>; 275 /* USB link/activity routed to USB LED */ 276 }; 277 278 inet@1 { 279 reg = <1>; 280 brcm,hardware-controlled; 281 brcm,activity-signal-sources = <1>; 282 /* INET activity routed to INET LED */ 283 }; 284 285 ephy0@4 { 286 reg = <4>; 287 brcm,hardware-controlled; 288 brcm,link-signal-sources = <4>; 289 /* EPHY0 link routed to EPHY0 LED */ 290 }; 291 292 ephy1@5 { 293 reg = <5>; 294 brcm,hardware-controlled; 295 brcm,link-signal-sources = <5>; 296 /* EPHY1 link routed to EPHY1 LED */ 297 }; 298 299 ephy2@6 { 300 reg = <6>; 301 brcm,hardware-controlled; 302 brcm,link-signal-sources = <6>; 303 /* EPHY2 link routed to EPHY2 LED */ 304 }; 305 306 ephy3@7 { 307 reg = <7>; 308 brcm,hardware-controlled; 309 brcm,link-signal-sources = <7>; 310 /* EPHY3 link routed to EPHY3 LED */ 311 }; 312 313 power_green@20 { 314 reg = <20>; 315 active-low; 316 label = "green:power"; 317 default-state = "on"; 318 }; 319 }; 320 - | 321 /* BCM6362 with 1 LED for all EPHYs */ 322 led-controller@10001900 { 323 compatible = "brcm,bcm6328-leds"; 324 #address-cells = <1>; 325 #size-cells = <0>; 326 reg = <0x10001900 0x24>; 327 328 usb@0 { 329 reg = <0>; 330 brcm,hardware-controlled; 331 brcm,link-signal-sources = <0 1>; 332 brcm,activity-signal-sources = <0 1>; 333 /* USB/INET link/activity routed to USB LED */ 334 }; 335 336 ephy@4 { 337 reg = <4>; 338 brcm,hardware-controlled; 339 brcm,link-signal-sources = <4 5 6 7>; 340 /* EPHY0/1/2/3 link routed to EPHY0 LED */ 341 }; 342 343 power_green@20 { 344 reg = <20>; 345 active-low; 346 label = "green:power"; 347 default-state = "on"; 348 }; 349 }; 350 - | 351 /* BCM6362 with EPHY LEDs swapped */ 352 led-controller@10001900 { 353 compatible = "brcm,bcm6328-leds"; 354 #address-cells = <1>; 355 #size-cells = <0>; 356 reg = <0x10001900 0x24>; 357 358 usb@0 { 359 reg = <0>; 360 brcm,hardware-controlled; 361 brcm,link-signal-sources = <0>; 362 brcm,activity-signal-sources = <0 1>; 363 /* USB link/act and INET act routed to USB LED */ 364 }; 365 366 ephy0@4 { 367 reg = <4>; 368 brcm,hardware-controlled; 369 brcm,link-signal-sources = <7>; 370 /* EPHY3 link routed to EPHY0 LED */ 371 }; 372 373 ephy1@5 { 374 reg = <5>; 375 brcm,hardware-controlled; 376 brcm,link-signal-sources = <6>; 377 /* EPHY2 link routed to EPHY1 LED */ 378 }; 379 380 ephy2@6 { 381 reg = <6>; 382 brcm,hardware-controlled; 383 brcm,link-signal-sources = <5>; 384 /* EPHY1 link routed to EPHY2 LED */ 385 }; 386 387 ephy3@7 { 388 reg = <7>; 389 brcm,hardware-controlled; 390 brcm,link-signal-sources = <4>; 391 /* EPHY0 link routed to EPHY3 LED */ 392 }; 393 394 power_green@20 { 395 reg = <20>; 396 active-low; 397 label = "green:power"; 398 default-state = "on"; 399 }; 400 }; 401