blob: 51cc0d82c12eb8b60d5e4dd9fc9b28bd1b88621b [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/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 active-low:
82 type: boolean
83 description: Makes LED active low.
84
85 brcm,hardware-controlled:
86 type: boolean
87 description: Makes this LED hardware controlled.
88
89 brcm,link-signal-sources:
90 $ref: /schemas/types.yaml#/definitions/uint32-array
91 minItems: 1
92 maxItems: 4
93 description: >
94 An array of hardware link signal sources. Up to four link hardware
95 signals can get muxed into these LEDs. Only valid for LEDs 0 to 7,
96 where LED signals 0 to 3 may be muxed to LEDs 0 to 3, and signals 4 to
97 7 may be muxed to LEDs 4 to 7. A signal can be muxed to more than one
98 LED, and one LED can have more than one source signal.
99
100 brcm,activity-signal-sources:
101 $ref: /schemas/types.yaml#/definitions/uint32-array
102 minItems: 1
103 maxItems: 4
104 description: >
105 An array of hardware activity signal sources. Up to four activity
106 hardware signals can get muxed into these LEDs. Only valid for LEDs 0
107 to 7, where LED signals 0 to 3 may be muxed to LEDs 0 to 3, and
108 signals 4 to 7 may be muxed to LEDs 4 to 7. A signal can be muxed to
109 more than one LED, and one LED can have more than one source signal.
110
111 required:
112 - reg
113
114 unevaluatedProperties: false
115
116required:
117 - reg
118 - "#address-cells"
119 - "#size-cells"
120
121additionalProperties: false
122
123examples:
124 - |
125 /* BCM6328 with 4 EPHY LEDs */
126 led-controller@10000800 {
127 compatible = "brcm,bcm6328-leds";
128 #address-cells = <1>;
129 #size-cells = <0>;
130 reg = <0x10000800 0x24>;
131
132 alarm_red@2 {
133 reg = <2>;
134 active-low;
135 label = "red:alarm";
136 };
137
138 inet_green@3 {
139 reg = <3>;
140 active-low;
141 label = "green:inet";
142 };
143
144 power_green@4 {
145 reg = <4>;
146 active-low;
147 label = "green:power";
148 default-state = "on";
149 };
150
151 ephy0_spd@17 {
152 reg = <17>;
153 brcm,hardware-controlled;
154 };
155
156 ephy1_spd@18 {
157 reg = <18>;
158 brcm,hardware-controlled;
159 };
160
161 ephy2_spd@19 {
162 reg = <19>;
163 brcm,hardware-controlled;
164 };
165
166 ephy3_spd@20 {
167 reg = <20>;
168 brcm,hardware-controlled;
169 };
170 };
171 - |
172 /* BCM63268 with Serial/GPHY0 LEDs */
173 led-controller@10001900 {
174 compatible = "brcm,bcm6328-leds";
175 #address-cells = <1>;
176 #size-cells = <0>;
177 reg = <0x10001900 0x24>;
178 brcm,serial-leds;
179 brcm,serial-dat-low;
180 brcm,serial-shift-inv;
181
182 gphy0_spd0@0 {
183 reg = <0>;
184 brcm,hardware-controlled;
185 brcm,link-signal-sources = <0>;
186 };
187
188 gphy0_spd1@1 {
189 reg = <1>;
190 brcm,hardware-controlled;
191 brcm,link-signal-sources = <1>;
192 };
193
194 inet_red@2 {
195 reg = <2>;
196 active-low;
197 label = "red:inet";
198 };
199
200 dsl_green@3 {
201 reg = <3>;
202 active-low;
203 label = "green:dsl";
204 };
205
206 usb_green@4 {
207 reg = <4>;
208 active-low;
209 label = "green:usb";
210 };
211
212 wps_green@7 {
213 reg = <7>;
214 active-low;
215 label = "green:wps";
216 };
217
218 inet_green@8 {
219 reg = <8>;
220 active-low;
221 label = "green:inet";
222 };
223
224 ephy0_act@9 {
225 reg = <9>;
226 brcm,hardware-controlled;
227 };
228
229 ephy1_act@10 {
230 reg = <10>;
231 brcm,hardware-controlled;
232 };
233
234 ephy2_act@11 {
235 reg = <11>;
236 brcm,hardware-controlled;
237 };
238
239 gphy0_act@12 {
240 reg = <12>;
241 brcm,hardware-controlled;
242 };
243
244 ephy0_spd@13 {
245 reg = <13>;
246 brcm,hardware-controlled;
247 };
248
249 ephy1_spd@14 {
250 reg = <14>;
251 brcm,hardware-controlled;
252 };
253
254 ephy2_spd@15 {
255 reg = <15>;
256 brcm,hardware-controlled;
257 };
258
259 power_green@20 {
260 reg = <20>;
261 active-low;
262 label = "green:power";
263 default-state = "on";
264 };
265 };
266 - |
267 /* BCM6362 with 1 LED for each EPHY */
268 led-controller@10001900 {
269 compatible = "brcm,bcm6328-leds";
270 #address-cells = <1>;
271 #size-cells = <0>;
272 reg = <0x10001900 0x24>;
273
274 usb@0 {
275 reg = <0>;
276 brcm,hardware-controlled;
277 brcm,link-signal-sources = <0>;
278 brcm,activity-signal-sources = <0>;
279 /* USB link/activity routed to USB LED */
280 };
281
282 inet@1 {
283 reg = <1>;
284 brcm,hardware-controlled;
285 brcm,activity-signal-sources = <1>;
286 /* INET activity routed to INET LED */
287 };
288
289 ephy0@4 {
290 reg = <4>;
291 brcm,hardware-controlled;
292 brcm,link-signal-sources = <4>;
293 /* EPHY0 link routed to EPHY0 LED */
294 };
295
296 ephy1@5 {
297 reg = <5>;
298 brcm,hardware-controlled;
299 brcm,link-signal-sources = <5>;
300 /* EPHY1 link routed to EPHY1 LED */
301 };
302
303 ephy2@6 {
304 reg = <6>;
305 brcm,hardware-controlled;
306 brcm,link-signal-sources = <6>;
307 /* EPHY2 link routed to EPHY2 LED */
308 };
309
310 ephy3@7 {
311 reg = <7>;
312 brcm,hardware-controlled;
313 brcm,link-signal-sources = <7>;
314 /* EPHY3 link routed to EPHY3 LED */
315 };
316
317 power_green@20 {
318 reg = <20>;
319 active-low;
320 label = "green:power";
321 default-state = "on";
322 };
323 };
324 - |
325 /* BCM6362 with 1 LED for all EPHYs */
326 led-controller@10001900 {
327 compatible = "brcm,bcm6328-leds";
328 #address-cells = <1>;
329 #size-cells = <0>;
330 reg = <0x10001900 0x24>;
331
332 usb@0 {
333 reg = <0>;
334 brcm,hardware-controlled;
335 brcm,link-signal-sources = <0 1>;
336 brcm,activity-signal-sources = <0 1>;
337 /* USB/INET link/activity routed to USB LED */
338 };
339
340 ephy@4 {
341 reg = <4>;
342 brcm,hardware-controlled;
343 brcm,link-signal-sources = <4 5 6 7>;
344 /* EPHY0/1/2/3 link routed to EPHY0 LED */
345 };
346
347 power_green@20 {
348 reg = <20>;
349 active-low;
350 label = "green:power";
351 default-state = "on";
352 };
353 };
354 - |
355 /* BCM6362 with EPHY LEDs swapped */
356 led-controller@10001900 {
357 compatible = "brcm,bcm6328-leds";
358 #address-cells = <1>;
359 #size-cells = <0>;
360 reg = <0x10001900 0x24>;
361
362 usb@0 {
363 reg = <0>;
364 brcm,hardware-controlled;
365 brcm,link-signal-sources = <0>;
366 brcm,activity-signal-sources = <0 1>;
367 /* USB link/act and INET act routed to USB LED */
368 };
369
370 ephy0@4 {
371 reg = <4>;
372 brcm,hardware-controlled;
373 brcm,link-signal-sources = <7>;
374 /* EPHY3 link routed to EPHY0 LED */
375 };
376
377 ephy1@5 {
378 reg = <5>;
379 brcm,hardware-controlled;
380 brcm,link-signal-sources = <6>;
381 /* EPHY2 link routed to EPHY1 LED */
382 };
383
384 ephy2@6 {
385 reg = <6>;
386 brcm,hardware-controlled;
387 brcm,link-signal-sources = <5>;
388 /* EPHY1 link routed to EPHY2 LED */
389 };
390
391 ephy3@7 {
392 reg = <7>;
393 brcm,hardware-controlled;
394 brcm,link-signal-sources = <4>;
395 /* EPHY0 link routed to EPHY3 LED */
396 };
397
398 power_green@20 {
399 reg = <20>;
400 active-low;
401 label = "green:power";
402 default-state = "on";
403 };
404 };