Cirrus Logic Madera class audio codecs Multi-Functional Device

These devices are audio SoCs with extensive digital capabilities and a range
of analogue I/O.

See also the child driver bindings in:
bindings/pinctrl/cirrus,madera-pinctrl.txt
bindings/regulator/arizona-regulator.txt
bindings/sound/madera.txt

Required properties:

  - compatible : One of the following chip-specific strings:
        "cirrus,cs47l35"
        "cirrus,cs47l85"
        "cirrus,cs47l90"
        "cirrus,cs47l91"
        "cirrus,wm1840"

  - reg : I2C slave address when connected using I2C, chip select number when
    using SPI.

  - DCVDD-supply : Power supply for the device as defined in
    bindings/regulator/regulator.txt
    Mandatory on CS47L35, CS47L90, CS47L91
    Optional on CS47L85, WM1840

  - AVDD-supply, DBVDD1-supply, DBVDD2-supply, CPVDD1-supply, CPVDD2-supply :
    Power supplies for the device

  - DBVDD3-supply, DBVDD4-supply : Power supplies for the device
    (CS47L85, CS47L90, CS47L91, WM1840)

  - SPKVDDL-supply, SPKVDDR-supply : Power supplies for the device
    (CS47L85, WM1840)

  - SPKVDD-supply : Power supply for the device
    (CS47L35)

  - interrupt-controller : Indicates that this device is an interrupt controller

  - #interrupt-cells: the number of cells to describe an IRQ, must be 2.
    The first cell is the IRQ number.
    The second cell is the flags, encoded as the trigger masks from
    bindings/interrupt-controller/interrupts.txt

  - gpio-controller : Indicates this device is a GPIO controller.

  - #gpio-cells : Must be 2. The first cell is the pin number. The second cell
    is reserved for future use and must be zero

  - interrupt-parent : The parent interrupt controller.

  - interrupts : The interrupt line the /IRQ signal for the device is
    connected to.

Optional properties:

  - MICVDD-supply : Power supply, only need to be specified if
    powered externally

  - reset-gpios : One entry specifying the GPIO controlling /RESET.
    As defined in bindings/gpio.txt.
    Although optional, it is strongly recommended to use a hardware reset

  - MICBIASx : Initial data for the MICBIAS regulators, as covered in
    Documentation/devicetree/bindings/regulator/regulator.txt.
    One for each MICBIAS generator (MICBIAS1, MICBIAS2, ...)
    (all codecs)

    One for each output pin (MICBIAS1A, MIBCIAS1B, MICBIAS2A, ...)
    (all except CS47L85, WM1840)

    The following following additional property is supported for the generator
    nodes:
      - cirrus,ext-cap : Set to 1 if the MICBIAS has external decoupling
        capacitors attached.

Optional child nodes:
    micvdd : Node containing initialization data for the micvdd regulator
    See bindings/regulator/arizona-regulator.txt

    ldo1 : Node containing initialization data for the LDO1 regulator
    See bindings/regulator/arizona-regulator.txt
    (cs47l85, wm1840)

Example:

cs47l85@0 {
	compatible = "cirrus,cs47l85";
	reg = <0>;

	reset-gpios = <&gpio 0>;

	interrupt-controller;
	#interrupt-cells = <2>;
	interrupts = <&host_irq1>;
	interrupt-parent = <&gic>;

	gpio-controller;
	#gpio-cells = <2>;
};
