GNU Linux-libre 6.8.9-gnu
[releases.git] / Documentation / devicetree / bindings / leds / leds-bcm6328.yaml
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
7 title: LEDs connected to Broadcom BCM6328 controller
8
9 maintainers:
10   - Álvaro Fernández Rojas <noltari@gmail.com>
11
12 description: |
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
36 properties:
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
69 patternProperties:
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
116 required:
117   - reg
118   - "#address-cells"
119   - "#size-cells"
120
121 additionalProperties: false
122
123 examples:
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     };