Hi Alvaro, Thanks for the update. Since this patch will require also DT ack, please add devicetree@xxxxxxxxxxxxxxx on cc as you'll be posting next version On Fri, 24 Apr 2015 19:06:15 +0200 Álvaro Fernández Rojas <noltari@xxxxxxxxx> wrote: > This adds device tree binding documentation for the Broadcom BCM6328 LED controller. > > Signed-off-by: Álvaro Fernández Rojas <noltari@xxxxxxxxx> > Signed-off-by: Jonas Gorski <jogo@xxxxxxxxxxx> > --- > v3: introduce changes suggested by Jacek > - Revert compatible string to "brcm,bcm6328-leds". > - Improved description. > - Renamed normal LEDs to hardware controlled. > - Explain that LEDs are active high by default on active-low optional property. > - Properties are now grouped depending on the type of LED and optional requirement. > - Added more examples to explain hardware controlled LEDs and activity/link selection. > v2: Introduce changes suggested by Florian and Jonas. > - Change compatible string to "brcm,bcm6328-leds-ctrl". > - Make valid LEDs statement more strict. > - Remove compatible strings from LED subnodes. > - Clarify that LEDs are active high by default. > - Add a better description for brcm,link-signal-sources and brcm,activity-signal-sources. > > .../devicetree/bindings/leds/leds-bcm6328.txt | 311 +++++++++++++++++++++ > 1 file changed, 311 insertions(+) > create mode 100644 Documentation/devicetree/bindings/leds/leds-bcm6328.txt > > diff --git a/Documentation/devicetree/bindings/leds/leds-bcm6328.txt b/Documentation/devicetree/bindings/leds/leds-bcm6328.txt > new file mode 100644 > index 0000000..6d838f8 > --- /dev/null > +++ b/Documentation/devicetree/bindings/leds/leds-bcm6328.txt > @@ -0,0 +1,311 @@ > +LEDs connected to Broadcom BCM6328 controller > + > +This controller is present on BCM6318, BCM6328, BCM6362 and BCM63268. > +In these SoCs it's possible to control LEDs both as GPIOs or by hardware. > +However, on some devices there are Serial LEDs (LEDs connected to a 74x164 > +controller), which can either be controlled by software (exporting the 74x164 > +as spi-gpio. See Documentation/devicetree/bindings/gpio/gpio-74x164.txt), or > +by hardware using this driver. > +Some of these Serial LEDs are hardware controlled (e.g. ethernet LEDs) and > +exporting the 74x164 as spi-gpio prevents those LEDs to be hardware > +controlled, so the only chance to keep them working is by using this driver. > + > +BCM6328 LED controller has a HWDIS register, which controls whether a LED > +should be controlled by a hardware signal instead of the MODE register value, > +with 0 meaning hardware control enabled and 1 hardware control disabled. This > +is usually 1:1 for hardware to LED signals, but through the activity/link > +registers you have some limited control over rerouting the LEDs (as > +explained later in brcm,link-signal-sources). Even if a LED is hardware > +controlled you are still able to make it blink or light it up if it isn't, > +but you can't turn it off if the hardware decides to light it up. For this > +reason, hardware controlled LEDs aren't registered as LED class devices. > + > +Required properties: > +- compatible: should be : "brcm,bcm6328-leds". Please drop the colon after "should be". Also it is more common to insert a space before the colon character. e.g.: compatible : should be ... Please apply this rule to each property. > +- #address-cells: must be 1 > +- #size-cells: must be 0 > +- reg: BCM6328 LED controller address and size. > > + > +Optional properties: > +- brcm,serial-leds: boolean which enables Serial LEDs. How about: brcm,serial-leds: Boolean, enables Serial LEDs. Boolean should begin with capital letter. Please refer to the other bindings in Documentation/devicetree/bindings to keep the style of DT documentation consistent. Also default value should be mentioned. > +Each LED is represented as a sub-node of the brcm,bcm6328-leds device. > + > +LED sub-node required properties: How about: Required properties for sub-nodes: > +- reg: LED pin number (only LEDs 0 to 23 are valid). > + > +Software controlled LED optional properties: How about: Optional properties for sub-nodes related to software controlled LEDs: > +- label (optional): see Documentation/devicetree/bindings/leds/common.txt > +- active-low (optional): boolean that makes LED active low. > + Default: false > +- default-state (optional): see > + Documentation/devicetree/bindings/leds/leds-gpio.txt > +- linux,default-trigger (optional): see > + Documentation/devicetree/bindings/leds/common.txt Please drop "(optional)" as you are already mentioned this in the section header. > +Hardware controlled LED optional properties: How about: Optional properties for sub-nodes related to hardware controlled LEDs: > +- brcm,hardware-controlled: boolean that makes this LED hardware > + controlled. > +- brcm,link-signal-sources: An array of hardware link > + signal sources. Up to four link hardware signals can get muxed into > + these LEDs. Only valid for LEDs 0 to 7, where LED signals 0 to 3 may > + be muxed to LEDs 0 to 3, and signals 4 to 7 may be muxed to LEDs > + 4 to 7. A signal can be muxed to more than one LED, and one LED can > + have more than one source signal. > +- brcm,activity-signal-sources: An array of hardware activity > + signal sources. Up to four activity hardware signals can get muxed into > + these LEDs. Only valid for LEDs 0 to 7, where LED signals 0 to 3 may > + be muxed to LEDs 0 to 3, and signals 4 to 7 may be muxed to LEDs > + 4 to 7. A signal can be muxed to more than one LED, and one LED can > + have more than one source signal. > + > +example 1) BCM6328 with 4 EPHY LEDs > + > +leds0: led-controller@10000800 { > + compatible = "brcm,bcm6328-leds"; > + #address-cells = <1>; > + #size-cells = <0>; > + reg = <0x10000800 0x24>; > + > + alarm_red@2 { > + reg = <2>; > + active-low; > + label = "red:alarm"; > + }; > + inet_green@3 { > + reg = <3>; > + active-low; > + label = "green:inet"; > + }; > + power_green@4 { > + reg = <4>; > + active-low; > + label = "green:power"; > + default-state = "on"; > + }; > + ephy0_spd@17 { > + reg = <17>; > + brcm,hardware-controlled; > + }; > + ephy1_spd@18 { > + reg = <18>; > + brcm,hardware-controlled; > + }; > + ephy2_spd@19 { > + reg = <19>; > + brcm,hardware-controlled; > + }; > + ephy3_spd@20 { > + reg = <20>; > + brcm,hardware-controlled; > + }; > +}; > + > +example 2) BCM63268 with Serial/GPHY0 LEDs > + > +leds0: led-controller@10001900 { > + compatible = "brcm,bcm6328-leds"; > + #address-cells = <1>; > + #size-cells = <0>; > + reg = <0x10001900 0x24>; > + brcm,serial-leds; > + > + gphy0_spd0@0 { > + reg = <0>; > + brcm,hardware-controlled; > + brcm,link-signal-sources = <0>; > + }; > + gphy0_spd1@1 { > + reg = <1>; > + brcm,hardware-controlled; > + brcm,link-signal-sources = <1>; > + }; > + inet_red@2 { > + reg = <2>; > + active-low; > + label = "red:inet"; > + }; > + dsl_green@3 { > + reg = <3>; > + active-low; > + label = "green:dsl"; > + }; > + usb_green@4 { > + reg = <4>; > + active-low; > + label = "green:usb"; > + }; > + wps_green@7 { > + reg = <7>; > + active-low; > + label = "green:wps"; > + }; > + inet_green@8 { > + reg = <8>; > + active-low; > + label = "green:inet"; > + }; > + ephy0_act@9 { > + reg = <9>; > + brcm,hardware-controlled; > + }; > + ephy1_act@10 { > + reg = <10>; > + brcm,hardware-controlled; > + }; > + ephy2_act@11 { > + reg = <11>; > + brcm,hardware-controlled; > + }; > + gphy0_act@12 { > + reg = <12>; > + brcm,hardware-controlled; > + }; > + ephy0_spd@13 { > + reg = <13>; > + brcm,hardware-controlled; > + }; > + ephy1_spd@14 { > + reg = <14>; > + brcm,hardware-controlled; > + }; > + ephy2_spd@15 { > + reg = <15>; > + brcm,hardware-controlled; > + }; > + power_green@20 { > + reg = <20>; > + active-low; > + label = "green:power"; > + default-state = "on"; > + }; > +}; > + > +example 3) BCM6362 with 1 LED for each EPHY > + > +leds0: led-controller@10001900 { > + compatible = "brcm,bcm6328-leds"; > + #address-cells = <1>; > + #size-cells = <0>; > + reg = <0x10001900 0x24>; > + > + usb@0 { > + reg = <0>; > + brcm,hardware-controlled; > + brcm,link-signal-sources = <0>; > + brcm,activity-signal-sources = <0>; > + /* USB link/activity routed to USB LED */ > + }; > + inet@1 { > + reg = <1>; > + brcm,hardware-controlled; > + brcm,activity-signal-sources = <1>; > + /* INET activity routed to INET LED */ > + }; > + ephy0@4 { > + reg = <4>; > + brcm,hardware-controlled; > + brcm,link-signal-sources = <4>; > + /* EPHY0 link routed to EPHY0 LED */ > + }; > + ephy1@5 { > + reg = <5>; > + brcm,hardware-controlled; > + brcm,link-signal-sources = <5>; > + /* EPHY1 link routed to EPHY1 LED */ > + }; > + ephy2@6 { > + reg = <6>; > + brcm,hardware-controlled; > + brcm,link-signal-sources = <6>; > + /* EPHY2 link routed to EPHY2 LED */ > + }; > + ephy3@7 { > + reg = <7>; > + brcm,hardware-controlled; > + brcm,link-signal-sources = <7>; > + /* EPHY3 link routed to EPHY3 LED */ > + }; > + power_green@20 { > + reg = <20>; > + active-low; > + label = "green:power"; > + default-state = "on"; > + }; > +}; > + > +example 4) BCM6362 with 1 LED for all EPHYs > + > +leds0: led-controller@10001900 { > + compatible = "brcm,bcm6328-leds"; > + #address-cells = <1>; > + #size-cells = <0>; > + reg = <0x10001900 0x24>; > + > + usb@0 { > + reg = <0>; > + brcm,hardware-controlled; > + brcm,link-signal-sources = <0 1>; > + brcm,activity-signal-sources = <0 1>; > + /* USB/INET link/activity routed to USB LED */ > + }; > + ephy@4 { > + reg = <4>; > + brcm,hardware-controlled; > + brcm,link-signal-sources = <4 5 6 7>; > + /* EPHY0/1/2/3 link routed to EPHY0 LED */ > + }; > + power_green@20 { > + reg = <20>; > + active-low; > + label = "green:power"; > + default-state = "on"; > + }; > +}; > + > +example 5) BCM6362 with EPHY LEDs swapped > + > +leds0: led-controller@10001900 { > + compatible = "brcm,bcm6328-leds"; > + #address-cells = <1>; > + #size-cells = <0>; > + reg = <0x10001900 0x24>; > + > + usb@0 { > + reg = <0>; > + brcm,hardware-controlled; > + brcm,link-signal-sources = <0>; > + brcm,activity-signal-sources = <0 1>; > + /* USB link/activity & INET activity routed to USB LED */ > + }; > + ephy0@4 { > + reg = <4>; > + brcm,hardware-controlled; > + brcm,link-signal-sources = <7>; > + /* EPHY3 link routed to EPHY0 LED */ > + }; > + ephy1@5 { > + reg = <5>; > + brcm,hardware-controlled; > + brcm,link-signal-sources = <6>; > + /* EPHY2 link routed to EPHY1 LED */ > + }; > + ephy2@6 { > + reg = <6>; > + brcm,hardware-controlled; > + brcm,link-signal-sources = <5>; > + /* EPHY1 link routed to EPHY2 LED */ > + }; > + ephy3@7 { > + reg = <7>; > + brcm,hardware-controlled; > + brcm,link-signal-sources = <4>; > + /* EPHY0 link routed to EPHY3 LED */ > + }; > + power_green@20 { > + reg = <20>; > + active-low; > + label = "green:power"; > + default-state = "on"; > + }; > +}; -- Best Regards, Jacek Anaszewski -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html