Merge remote-tracking branch 'leds/for-next'
[deliverable/linux.git] / Documentation / devicetree / bindings / leds / leds-bcm6328.txt
1 LEDs connected to Broadcom BCM6328 controller
2
3 This controller is present on BCM6318, BCM6328, BCM6362 and BCM63268.
4 In these SoCs it's possible to control LEDs both as GPIOs or by hardware.
5 However, on some devices there are Serial LEDs (LEDs connected to a 74x164
6 controller), which can either be controlled by software (exporting the 74x164
7 as spi-gpio. See Documentation/devicetree/bindings/gpio/gpio-74x164.txt), or
8 by hardware using this driver.
9 Some of these Serial LEDs are hardware controlled (e.g. ethernet LEDs) and
10 exporting the 74x164 as spi-gpio prevents those LEDs to be hardware
11 controlled, so the only chance to keep them working is by using this driver.
12
13 BCM6328 LED controller has a HWDIS register, which controls whether a LED
14 should be controlled by a hardware signal instead of the MODE register value,
15 with 0 meaning hardware control enabled and 1 hardware control disabled. This
16 is usually 1:1 for hardware to LED signals, but through the activity/link
17 registers you have some limited control over rerouting the LEDs (as
18 explained later in brcm,link-signal-sources). Even if a LED is hardware
19 controlled you are still able to make it blink or light it up if it isn't,
20 but you can't turn it off if the hardware decides to light it up. For this
21 reason, hardware controlled LEDs aren't registered as LED class devices.
22
23 Required properties:
24 - compatible : should be "brcm,bcm6328-leds".
25 - #address-cells : must be 1.
26 - #size-cells : must be 0.
27 - reg : BCM6328 LED controller address and size.
28
29 Optional properties:
30 - brcm,serial-leds : Boolean, enables Serial LEDs.
31 Default : false
32 - brcm,serial-mux : Boolean, enables Serial LEDs multiplexing.
33 Default : false
34 - brcm,serial-clk-low : Boolean, makes clock signal active low.
35 Default : false
36 - brcm,serial-dat-low : Boolean, makes data signal active low.
37 Default : false
38 - brcm,serial-shift-inv : Boolean, inverts Serial LEDs shift direction.
39 Default : false
40
41 Each LED is represented as a sub-node of the brcm,bcm6328-leds device.
42
43 LED sub-node required properties:
44 - reg : LED pin number (only LEDs 0 to 23 are valid).
45
46 LED sub-node optional properties:
47 a) Optional properties for sub-nodes related to software controlled LEDs:
48 - label : see Documentation/devicetree/bindings/leds/common.txt
49 - active-low : Boolean, makes LED active low.
50 Default : false
51 - default-state : see
52 Documentation/devicetree/bindings/leds/common.txt
53 - linux,default-trigger : see
54 Documentation/devicetree/bindings/leds/common.txt
55
56 b) Optional properties for sub-nodes related to hardware controlled LEDs:
57 - brcm,hardware-controlled : Boolean, makes this LED hardware controlled.
58 Default : false
59 - brcm,link-signal-sources : An array of hardware link
60 signal sources. Up to four link hardware signals can get muxed into
61 these LEDs. Only valid for LEDs 0 to 7, where LED signals 0 to 3 may
62 be muxed to LEDs 0 to 3, and signals 4 to 7 may be muxed to LEDs
63 4 to 7. A signal can be muxed to more than one LED, and one LED can
64 have more than one source signal.
65 - brcm,activity-signal-sources : An array of hardware activity
66 signal sources. Up to four activity hardware signals can get muxed into
67 these LEDs. Only valid for LEDs 0 to 7, where LED signals 0 to 3 may
68 be muxed to LEDs 0 to 3, and signals 4 to 7 may be muxed to LEDs
69 4 to 7. A signal can be muxed to more than one LED, and one LED can
70 have more than one source signal.
71
72 Examples:
73 Scenario 1 : BCM6328 with 4 EPHY LEDs
74 leds0: led-controller@10000800 {
75 compatible = "brcm,bcm6328-leds";
76 #address-cells = <1>;
77 #size-cells = <0>;
78 reg = <0x10000800 0x24>;
79
80 alarm_red@2 {
81 reg = <2>;
82 active-low;
83 label = "red:alarm";
84 };
85 inet_green@3 {
86 reg = <3>;
87 active-low;
88 label = "green:inet";
89 };
90 power_green@4 {
91 reg = <4>;
92 active-low;
93 label = "green:power";
94 default-state = "on";
95 };
96 ephy0_spd@17 {
97 reg = <17>;
98 brcm,hardware-controlled;
99 };
100 ephy1_spd@18 {
101 reg = <18>;
102 brcm,hardware-controlled;
103 };
104 ephy2_spd@19 {
105 reg = <19>;
106 brcm,hardware-controlled;
107 };
108 ephy3_spd@20 {
109 reg = <20>;
110 brcm,hardware-controlled;
111 };
112 };
113
114 Scenario 2 : BCM63268 with Serial/GPHY0 LEDs
115 leds0: led-controller@10001900 {
116 compatible = "brcm,bcm6328-leds";
117 #address-cells = <1>;
118 #size-cells = <0>;
119 reg = <0x10001900 0x24>;
120 brcm,serial-leds;
121 brcm,serial-dat-low;
122 brcm,serial-shift-inv;
123
124 gphy0_spd0@0 {
125 reg = <0>;
126 brcm,hardware-controlled;
127 brcm,link-signal-sources = <0>;
128 };
129 gphy0_spd1@1 {
130 reg = <1>;
131 brcm,hardware-controlled;
132 brcm,link-signal-sources = <1>;
133 };
134 inet_red@2 {
135 reg = <2>;
136 active-low;
137 label = "red:inet";
138 };
139 dsl_green@3 {
140 reg = <3>;
141 active-low;
142 label = "green:dsl";
143 };
144 usb_green@4 {
145 reg = <4>;
146 active-low;
147 label = "green:usb";
148 };
149 wps_green@7 {
150 reg = <7>;
151 active-low;
152 label = "green:wps";
153 };
154 inet_green@8 {
155 reg = <8>;
156 active-low;
157 label = "green:inet";
158 };
159 ephy0_act@9 {
160 reg = <9>;
161 brcm,hardware-controlled;
162 };
163 ephy1_act@10 {
164 reg = <10>;
165 brcm,hardware-controlled;
166 };
167 ephy2_act@11 {
168 reg = <11>;
169 brcm,hardware-controlled;
170 };
171 gphy0_act@12 {
172 reg = <12>;
173 brcm,hardware-controlled;
174 };
175 ephy0_spd@13 {
176 reg = <13>;
177 brcm,hardware-controlled;
178 };
179 ephy1_spd@14 {
180 reg = <14>;
181 brcm,hardware-controlled;
182 };
183 ephy2_spd@15 {
184 reg = <15>;
185 brcm,hardware-controlled;
186 };
187 power_green@20 {
188 reg = <20>;
189 active-low;
190 label = "green:power";
191 default-state = "on";
192 };
193 };
194
195 Scenario 3 : BCM6362 with 1 LED for each EPHY
196 leds0: led-controller@10001900 {
197 compatible = "brcm,bcm6328-leds";
198 #address-cells = <1>;
199 #size-cells = <0>;
200 reg = <0x10001900 0x24>;
201
202 usb@0 {
203 reg = <0>;
204 brcm,hardware-controlled;
205 brcm,link-signal-sources = <0>;
206 brcm,activity-signal-sources = <0>;
207 /* USB link/activity routed to USB LED */
208 };
209 inet@1 {
210 reg = <1>;
211 brcm,hardware-controlled;
212 brcm,activity-signal-sources = <1>;
213 /* INET activity routed to INET LED */
214 };
215 ephy0@4 {
216 reg = <4>;
217 brcm,hardware-controlled;
218 brcm,link-signal-sources = <4>;
219 /* EPHY0 link routed to EPHY0 LED */
220 };
221 ephy1@5 {
222 reg = <5>;
223 brcm,hardware-controlled;
224 brcm,link-signal-sources = <5>;
225 /* EPHY1 link routed to EPHY1 LED */
226 };
227 ephy2@6 {
228 reg = <6>;
229 brcm,hardware-controlled;
230 brcm,link-signal-sources = <6>;
231 /* EPHY2 link routed to EPHY2 LED */
232 };
233 ephy3@7 {
234 reg = <7>;
235 brcm,hardware-controlled;
236 brcm,link-signal-sources = <7>;
237 /* EPHY3 link routed to EPHY3 LED */
238 };
239 power_green@20 {
240 reg = <20>;
241 active-low;
242 label = "green:power";
243 default-state = "on";
244 };
245 };
246
247 Scenario 4 : BCM6362 with 1 LED for all EPHYs
248 leds0: led-controller@10001900 {
249 compatible = "brcm,bcm6328-leds";
250 #address-cells = <1>;
251 #size-cells = <0>;
252 reg = <0x10001900 0x24>;
253
254 usb@0 {
255 reg = <0>;
256 brcm,hardware-controlled;
257 brcm,link-signal-sources = <0 1>;
258 brcm,activity-signal-sources = <0 1>;
259 /* USB/INET link/activity routed to USB LED */
260 };
261 ephy@4 {
262 reg = <4>;
263 brcm,hardware-controlled;
264 brcm,link-signal-sources = <4 5 6 7>;
265 /* EPHY0/1/2/3 link routed to EPHY0 LED */
266 };
267 power_green@20 {
268 reg = <20>;
269 active-low;
270 label = "green:power";
271 default-state = "on";
272 };
273 };
274
275 Scenario 5 : BCM6362 with EPHY LEDs swapped
276 leds0: led-controller@10001900 {
277 compatible = "brcm,bcm6328-leds";
278 #address-cells = <1>;
279 #size-cells = <0>;
280 reg = <0x10001900 0x24>;
281
282 usb@0 {
283 reg = <0>;
284 brcm,hardware-controlled;
285 brcm,link-signal-sources = <0>;
286 brcm,activity-signal-sources = <0 1>;
287 /* USB link/act and INET act routed to USB LED */
288 };
289 ephy0@4 {
290 reg = <4>;
291 brcm,hardware-controlled;
292 brcm,link-signal-sources = <7>;
293 /* EPHY3 link routed to EPHY0 LED */
294 };
295 ephy1@5 {
296 reg = <5>;
297 brcm,hardware-controlled;
298 brcm,link-signal-sources = <6>;
299 /* EPHY2 link routed to EPHY1 LED */
300 };
301 ephy2@6 {
302 reg = <6>;
303 brcm,hardware-controlled;
304 brcm,link-signal-sources = <5>;
305 /* EPHY1 link routed to EPHY2 LED */
306 };
307 ephy3@7 {
308 reg = <7>;
309 brcm,hardware-controlled;
310 brcm,link-signal-sources = <4>;
311 /* EPHY0 link routed to EPHY3 LED */
312 };
313 power_green@20 {
314 reg = <20>;
315 active-low;
316 label = "green:power";
317 default-state = "on";
318 };
319 };
This page took 0.040436 seconds and 5 git commands to generate.