# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause %YAML 1.2 --- $id: http://devicetree.org/schemas/mfd/cirrus,madera.yaml# $schema: http://devicetree.org/meta-schemas/core.yaml# title: Cirrus Logic Madera class audio CODECs Multi-Functional Device maintainers: - patches@opensource.cirrus.com description: | 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.yaml bindings/regulator/wlf,arizona.yaml bindings/sound/cirrus,madera.yaml allOf: - $ref: /schemas/pinctrl/cirrus,madera.yaml# - $ref: /schemas/regulator/wlf,arizona.yaml# - $ref: /schemas/sound/cirrus,madera.yaml# - if: properties: compatible: contains: enum: - cirrus,cs47l85 - wlf,wm1840 then: properties: SPKVDDL-supply: description: Left speaker driver power supply. SPKVDDR-supply: description: Right speaker driver power supply. required: - SPKVDDL-supply - SPKVDDR-supply else: required: - DCVDD-supply - if: properties: compatible: contains: enum: - cirrus,cs47l15 - cirrus,cs47l35 then: properties: SPKVDD-supply: description: Mono speaker driver power supply. required: - SPKVDD-supply - if: properties: compatible: contains: enum: - cirrus,cs47l35 - cirrus,cs47l85 - cirrus,cs47l90 - cirrus,cs47l91 - wlf,wm1840 then: properties: DBVDD2-supply: description: Databus power supply. required: - DBVDD2-supply - if: properties: compatible: contains: enum: - cirrus,cs47l85 - cirrus,cs47l90 - cirrus,cs47l91 - wlf,wm1840 then: properties: DBVDD3-supply: description: Databus power supply. DBVDD4-supply: description: Databus power supply. - if: properties: compatible: contains: enum: - cirrus,cs47l15 then: required: - MICVDD-supply else: properties: CPVDD2-supply: description: Secondary charge pump power supply. required: - CPVDD2-supply properties: compatible: enum: - cirrus,cs47l15 - cirrus,cs47l35 - cirrus,cs47l85 - cirrus,cs47l90 - cirrus,cs47l91 - cirrus,cs42l92 - cirrus,cs47l92 - cirrus,cs47l93 - cirrus,wm1840 reg: maxItems: 1 gpio-controller: true '#gpio-cells': description: The first cell is the pin number. The second cell is reserved for future use and must be zero const: 2 interrupt-controller: true '#interrupt-cells': description: The first cell is the IRQ number. The second cell is the flags, encoded as the trigger masks from bindings/interrupt-controller/interrupts.txt const: 2 interrupts: maxItems: 1 reset-gpios: description: One entry specifying the GPIO controlling /RESET. As defined in bindings/gpio.txt. Although optional, it is strongly recommended to use a hardware reset. maxItems: 1 clocks: description: Should reference the clocks supplied on MCLK1, MCLK2 and MCLK3. minItems: 1 maxItems: 3 clock-names: description: | May contain up to three strings: "mclk1" For the clock supplied on MCLK1, recommended to be a high quality audio reference clock. "mclk2" For the clock supplied on MCLK2, required to be an always on 32k clock. "mclk3" For the clock supplied on MCLK3. oneOf: - items: - const: mclk1 - items: - const: mclk2 - items: - const: mclk3 - items: - const: mclk1 - const: mclk2 - items: - const: mclk1 - const: mclk3 - items: - const: mclk2 - const: mclk3 - items: - const: mclk1 - const: mclk2 - const: mclk3 AVDD-supply: description: Analogue power supply. DBVDD1-supply: description: Databus power supply. CPVDD1-supply: description: Charge pump power supply. DCVDD-supply: description: Digital power supply, optional on CS47L85, WM1840 where it can be supplied internally. MICVDD-supply: description: Microphone power supply, normally supplied internally except on cs47l24, wm1831 where it is mandatory. required: - compatible - gpio-controller - '#gpio-cells' - interrupt-controller - '#interrupt-cells' - interrupts - AVDD-supply - DBVDD1-supply - CPVDD1-supply unevaluatedProperties: false examples: - | #include <dt-bindings/sound/madera.h> i2c@e0004000 { #address-cells = <1>; #size-cells = <0>; reg = <0xe0004000 0x1000>; cs47l85: codec@1a { compatible = "cirrus,cs47l85"; reg = <0x1a>; reset-gpios = <&gpio 0>; wlf,ldoena = <&gpio 1>; interrupt-controller; #interrupt-cells = <2>; interrupts = <4 1 0>; gpio-controller; #gpio-cells = <2>; AVDD-supply = <&vdd1v8>; DBVDD1-supply = <&vdd1v8>; DBVDD2-supply = <&vdd1v8>; DBVDD3-supply = <&vdd1v8>; DBVDD4-supply = <&vdd1v8>; CPVDD1-supply = <&vdd1v8>; CPVDD2-supply = <&vdd1v2>; SPKVDDL-supply = <&vdd5v>; SPKVDDR-supply = <&vdd5v>; clocks = <&clks 0>, <&clks 1>, <&clks 2>; clock-names = "mclk1", "mclk2", "mclk3"; cirrus,dmic-ref = <0 0 MADERA_DMIC_REF_MICBIAS1>; cirrus,inmode = < MADERA_INMODE_SE MADERA_INMODE_SE MADERA_INMODE_SE MADERA_INMODE_SE MADERA_INMODE_DIFF MADERA_INMODE_DIFF >; cirrus,max-channels-clocked = <2 0 0>; pinctrl-names = "default"; pinctrl-0 = <&pinsettings>; pinsettings: pin-settings { aif1-pins { groups = "aif1"; function = "aif1"; bias-bus-hold; }; aif2-pins { groups = "aif2"; function = "aif2"; bias-bus-hold; }; aif3-pins { groups = "aif3"; function = "aif3"; bias-bus-hold; }; }; }; };