blob: 499c62c04daab1dbfafd034b0bf0108121ffd5b4 [file] [log] [blame]
Charles Keepax2cb80522020-05-13 10:57:20 +01001# 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:
Rob Herringf516fb72020-04-20 21:24:47 -0500101 properties:
102 compatible:
103 contains:
104 enum:
105 - cirrus,cs47l15
Charles Keepax2cb80522020-05-13 10:57:20 +0100106 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:
Rob Herringf516fb72020-04-20 21:24:47 -0500177 - const: mclk1
Charles Keepax2cb80522020-05-13 10:57:20 +0100178 - items:
Rob Herringf516fb72020-04-20 21:24:47 -0500179 - const: mclk2
Charles Keepax2cb80522020-05-13 10:57:20 +0100180 - items:
Rob Herringf516fb72020-04-20 21:24:47 -0500181 - const: mclk3
Charles Keepax2cb80522020-05-13 10:57:20 +0100182 - items:
Rob Herringf516fb72020-04-20 21:24:47 -0500183 - const: mclk1
184 - const: mclk2
Charles Keepax2cb80522020-05-13 10:57:20 +0100185 - items:
Rob Herringf516fb72020-04-20 21:24:47 -0500186 - const: mclk1
187 - const: mclk3
Charles Keepax2cb80522020-05-13 10:57:20 +0100188 - items:
Rob Herringf516fb72020-04-20 21:24:47 -0500189 - const: mclk2
190 - const: mclk3
Charles Keepax2cb80522020-05-13 10:57:20 +0100191 - items:
Rob Herringf516fb72020-04-20 21:24:47 -0500192 - const: mclk1
193 - const: mclk2
194 - const: mclk3
Charles Keepax2cb80522020-05-13 10:57:20 +0100195
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 };