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      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    };
405