* Common leds properties.

LED and flash LED devices provide the same basic functionality as current
regulators, but extended with LED and flash LED specific features like
blinking patterns, flash timeout, flash faults and external flash strobe mode.

Many LED devices expose more than one current output that can be connected
to one or more discrete LED component. Since the arrangement of connections
can influence the way of the LED device initialization, the LED components
have to be tightly coupled with the LED device binding. They are represented
by child nodes of the parent LED device binding.

Optional properties for child nodes:
- led-sources : List of device current outputs the LED is connected to. The
		outputs are identified by the numbers that must be defined
		in the LED device binding documentation.
- label : The label for this LED. If omitted, the label is taken from the node
	  name (excluding the unit address). It has to uniquely identify
	  a device, i.e. no other LED class device can be assigned the same
	  label.

- default-state : The initial state of the LED. Valid values are "on", "off",
  and "keep". If the LED is already on or off and the default-state property is
  set the to same value, then no glitch should be produced where the LED
  momentarily turns off (or on). The "keep" setting will keep the LED at
  whatever its current state is, without producing a glitch.  The default is
  off if this property is not present.

- linux,default-trigger :  This parameter, if present, is a
    string defining the trigger assigned to the LED.  Current triggers are:
     "backlight" - LED will act as a back-light, controlled by the framebuffer
		   system
     "default-on" - LED will turn on (but for leds-gpio see "default-state"
		    property in Documentation/devicetree/bindings/leds/leds-gpio.txt)
     "heartbeat" - LED "double" flashes at a load average based rate
     "disk-activity" - LED indicates disk activity
     "ide-disk" - LED indicates IDE disk activity (deprecated),
                  in new implementations use "disk-activity"
     "timer" - LED flashes at a fixed, configurable rate

- led-max-microamp : Maximum LED supply current in microamperes. This property
                     can be made mandatory for the board configurations
                     introducing a risk of hardware damage in case an excessive
                     current is set.
                     For flash LED controllers with configurable current this
                     property is mandatory for the LEDs in the non-flash modes
                     (e.g. torch or indicator).

- panic-indicator : This property specifies that the LED should be used,
		    if at all possible, as a panic indicator.

- trigger-sources : List of devices which should be used as a source triggering
		    this LED activity. Some LEDs can be related to a specific
		    device and should somehow indicate its state. E.g. USB 2.0
		    LED may react to device(s) in a USB 2.0 port(s).
		    Another common example is switch or router with multiple
		    Ethernet ports each of them having its own LED assigned
		    (assuming they are not hardwired). In such cases this
		    property should contain phandle(s) of related source
		    device(s).
		    In many cases LED can be related to more than one device
		    (e.g. one USB LED vs. multiple USB ports). Each source
		    should be represented by a node in the device tree and be
		    referenced by a phandle and a set of phandle arguments. A
		    length of arguments should be specified by the
		    #trigger-source-cells property in the source node.

Required properties for flash LED child nodes:
- flash-max-microamp : Maximum flash LED supply current in microamperes.
- flash-max-timeout-us : Maximum timeout in microseconds after which the flash
                         LED is turned off.

For controllers that have no configurable current the flash-max-microamp
property can be omitted.
For controllers that have no configurable timeout the flash-max-timeout-us
property can be omitted.

* Trigger source providers

Each trigger source should be represented by a device tree node. It may be e.g.
a USB port or an Ethernet device.

Required properties for trigger source:
- #trigger-source-cells : Number of cells in a source trigger. Typically 0 for
			  nodes of simple trigger sources (e.g. a specific USB
			  port).

* Examples

gpio-leds {
	compatible = "gpio-leds";

	system-status {
		label = "Status";
		linux,default-trigger = "heartbeat";
		gpios = <&gpio0 0 GPIO_ACTIVE_HIGH>;
	};

	usb {
		gpios = <&gpio0 1 GPIO_ACTIVE_HIGH>;
		trigger-sources = <&ohci_port1>, <&ehci_port1>;
	};
};

max77693-led {
	compatible = "maxim,max77693-led";

	camera-flash {
		label = "Flash";
		led-sources = <0>, <1>;
		led-max-microamp = <50000>;
		flash-max-microamp = <320000>;
		flash-max-timeout-us = <500000>;
	};
};
