xref: /linux/Documentation/devicetree/bindings/leds/leds-bcm6328.yaml (revision 6e7fd890f1d6ac83805409e9c346240de2705584)
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