1# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/mfd/cirrus,madera.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: Cirrus Logic Madera class audio CODECs Multi-Functional Device
8
9maintainers:
10  - patches@opensource.cirrus.com
11
12description: |
13  These devices are audio SoCs with extensive digital capabilities and a range
14  of analogue I/O.
15
16  See also the child driver bindings in:
17
18    bindings/pinctrl/cirrus,madera.yaml
19    bindings/regulator/wlf,arizona.yaml
20    bindings/sound/cirrus,madera.yaml
21
22allOf:
23  - $ref: /schemas/pinctrl/cirrus,madera.yaml#
24  - $ref: /schemas/regulator/wlf,arizona.yaml#
25  - $ref: /schemas/sound/cirrus,madera.yaml#
26  - if:
27      properties:
28        compatible:
29          contains:
30            enum:
31              - cirrus,cs47l85
32              - wlf,wm1840
33    then:
34      properties:
35        SPKVDDL-supply:
36          description:
37            Left speaker driver power supply.
38
39        SPKVDDR-supply:
40          description:
41            Right speaker driver power supply.
42
43      required:
44        - SPKVDDL-supply
45        - SPKVDDR-supply
46    else:
47      required:
48        - DCVDD-supply
49  - if:
50      properties:
51        compatible:
52          contains:
53            enum:
54              - cirrus,cs47l15
55              - cirrus,cs47l35
56    then:
57      properties:
58        SPKVDD-supply:
59          description:
60            Mono speaker driver power supply.
61
62      required:
63        - SPKVDD-supply
64  - if:
65      properties:
66        compatible:
67          contains:
68            enum:
69              - cirrus,cs47l35
70              - cirrus,cs47l85
71              - cirrus,cs47l90
72              - cirrus,cs47l91
73              - wlf,wm1840
74    then:
75      properties:
76        DBVDD2-supply:
77          description:
78            Databus power supply.
79
80      required:
81        - DBVDD2-supply
82  - if:
83      properties:
84        compatible:
85          contains:
86            enum:
87              - cirrus,cs47l85
88              - cirrus,cs47l90
89              - cirrus,cs47l91
90              - wlf,wm1840
91    then:
92      properties:
93        DBVDD3-supply:
94          description:
95            Databus power supply.
96
97        DBVDD4-supply:
98          description:
99            Databus power supply.
100  - if:
101     properties:
102       compatible:
103         contains:
104           enum:
105             - cirrus,cs47l15
106    then:
107      required:
108        - MICVDD-supply
109    else:
110      properties:
111        CPVDD2-supply:
112          description:
113            Secondary charge pump power supply.
114
115      required:
116        - CPVDD2-supply
117
118properties:
119  compatible:
120    enum:
121      - cirrus,cs47l15
122      - cirrus,cs47l35
123      - cirrus,cs47l85
124      - cirrus,cs47l90
125      - cirrus,cs47l91
126      - cirrus,cs42l92
127      - cirrus,cs47l92
128      - cirrus,cs47l93
129      - cirrus,wm1840
130
131  reg:
132    maxItems: 1
133
134  gpio-controller: true
135
136  '#gpio-cells':
137    description:
138      The first cell is the pin number. The second cell is reserved for
139      future use and must be zero
140    const: 2
141
142  interrupt-controller: true
143
144  '#interrupt-cells':
145    description:
146      The first cell is the IRQ number.
147      The second cell is the flags, encoded as the trigger masks from
148      bindings/interrupt-controller/interrupts.txt
149    const: 2
150
151  interrupts:
152    maxItems: 1
153
154  reset-gpios:
155    description:
156      One entry specifying the GPIO controlling /RESET.  As defined in
157      bindings/gpio.txt.  Although optional, it is strongly recommended
158      to use a hardware reset.
159    maxItems: 1
160
161  clocks:
162    description:
163      Should reference the clocks supplied on MCLK1, MCLK2 and MCLK3.
164    minItems: 1
165    maxItems: 3
166
167  clock-names:
168    description: |
169      May contain up to three strings:
170        "mclk1" For the clock supplied on MCLK1, recommended to be a
171                high quality audio reference clock.
172        "mclk2" For the clock supplied on MCLK2, required to be an
173                always on 32k clock.
174        "mclk3" For the clock supplied on MCLK3.
175    oneOf:
176      - items:
177        - const: mclk1
178      - items:
179        - const: mclk2
180      - items:
181        - const: mclk3
182      - items:
183        - const: mclk1
184        - const: mclk2
185      - items:
186        - const: mclk1
187        - const: mclk3
188      - items:
189        - const: mclk2
190        - const: mclk3
191      - items:
192        - const: mclk1
193        - const: mclk2
194        - const: mclk3
195
196  AVDD-supply:
197    description:
198      Analogue power supply.
199
200  DBVDD1-supply:
201    description:
202      Databus power supply.
203
204  CPVDD1-supply:
205    description:
206      Charge pump power supply.
207
208  DCVDD-supply:
209    description:
210      Digital power supply, optional on CS47L85, WM1840 where it can
211      be supplied internally.
212
213  MICVDD-supply:
214    description:
215      Microphone power supply, normally supplied internally except on
216      cs47l24, wm1831 where it is mandatory.
217
218required:
219  - compatible
220  - gpio-controller
221  - '#gpio-cells'
222  - interrupt-controller
223  - '#interrupt-cells'
224  - interrupt-parent
225  - interrupts
226  - AVDD-supply
227  - DBVDD1-supply
228  - CPVDD1-supply
229
230unevaluatedProperties: false
231
232examples:
233  - |
234    #include <dt-bindings/sound/madera.h>
235    i2c@e0004000 {
236        #address-cells = <1>;
237        #size-cells = <0>;
238        reg = <0xe0004000 0x1000>;
239
240        cs47l85: codec@1a {
241            compatible = "cirrus,cs47l85";
242            reg = <0x1a>;
243
244            reset-gpios = <&gpio 0>;
245            wlf,ldoena = <&gpio 1>;
246
247            interrupt-controller;
248            #interrupt-cells = <2>;
249            interrupts = <&host_irq1>;
250            interrupt-parent = <&gic>;
251
252            gpio-controller;
253            #gpio-cells = <2>;
254
255            AVDD-supply = <&vdd1v8>;
256            DBVDD1-supply = <&vdd1v8>;
257            DBVDD2-supply = <&vdd1v8>;
258            DBVDD3-supply = <&vdd1v8>;
259            DBVDD4-supply = <&vdd1v8>;
260            CPVDD1-supply = <&vdd1v8>;
261            CPVDD2-supply = <&vdd1v2>;
262            SPKVDDL-supply = <&vdd5v>;
263            SPKVDDR-supply = <&vdd5v>;
264
265            clocks = <&clks 0>, <&clks 1>, <&clks 2>;
266            clock-names = "mclk1", "mclk2", "mclk3";
267
268            cirrus,dmic-ref = <0 0 MADERA_DMIC_REF_MICBIAS1>;
269            cirrus,inmode = <
270                MADERA_INMODE_SE   MADERA_INMODE_SE
271                MADERA_INMODE_SE   MADERA_INMODE_SE
272                MADERA_INMODE_DIFF MADERA_INMODE_DIFF
273            >;
274            cirrus,max-channels-clocked = <2 0 0>;
275
276            pinctrl-names = "default";
277            pinctrl-0 = <&pinsettings>;
278
279            pinsettings: pin-settings {
280                aif1-pins {
281                    groups = "aif1";
282                    function = "aif1";
283                    bias-bus-hold;
284                };
285
286                aif2-pins {
287                    groups = "aif2";
288                    function = "aif2";
289                    bias-bus-hold;
290                };
291
292                aif3-pins {
293                    groups = "aif3";
294                    function = "aif3";
295                    bias-bus-hold;
296                };
297            };
298        };
299    };
300