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".
  - #address-cells : must be 1.
  - #size-cells : must be 0.
  - reg : BCM6328 LED controller address and size.

Optional properties:
  - brcm,serial-leds : Boolean, enables Serial LEDs.
    Default : false

Each LED is represented as a sub-node of the brcm,bcm6328-leds device.

LED sub-node required properties:
  - reg : LED pin number (only LEDs 0 to 23 are valid).

LED sub-node optional properties:
  a) Optional properties for sub-nodes related to software controlled LEDs:
    - label : see Documentation/devicetree/bindings/leds/common.txt
    - active-low : Boolean, makes LED active low.
      Default : false
    - default-state : see
      Documentation/devicetree/bindings/leds/leds-gpio.txt
    - linux,default-trigger : see
      Documentation/devicetree/bindings/leds/common.txt

  b) Optional properties for sub-nodes related to hardware controlled LEDs:
    - brcm,hardware-controlled : Boolean, makes this LED hardware controlled.
      Default : false
    - 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.

Examples:
Scenario 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;
		};
	};

Scenario 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";
		};
	};

Scenario 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";
		};
	};

Scenario 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";
		};
	};

Scenario 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/act and INET act 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";
		};
	};
