* 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
     "pattern" - LED alters the brightness for the specified duration with one
                 software timer (requires "led-pattern" property)

- led-pattern : Array of integers with default pattern for certain triggers.
                Each trigger may parse this property differently:
                - one-shot : two numbers specifying delay on and delay off (in ms),
                - timer : two numbers specifying delay on and delay off (in ms),
                - pattern : the pattern is given by a series of tuples, of
                  brightness and duration (in ms).  The exact format is
                  described in:
                  Documentation/devicetree/bindings/leds/leds-trigger-pattern.txt


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