blob: 59ac2d1d1ccfa4ce6b38a0c0db82243a19619320 [file] [log] [blame]
Tom Rini53633a82024-02-29 12:33:36 -05001# SPDX-License-Identifier: GPL-2.0
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/sound/simple-card.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: Simple Audio Card Driver
8
9maintainers:
10 - Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
11
12definitions:
13
14 frame-master:
15 description: Indicates dai-link frame master.
16 $ref: /schemas/types.yaml#/definitions/phandle
17
18 bitclock-master:
19 description: Indicates dai-link bit clock master
20 $ref: /schemas/types.yaml#/definitions/phandle
21
22 frame-inversion:
23 description: dai-link uses frame clock inversion
24 $ref: /schemas/types.yaml#/definitions/flag
25
26 bitclock-inversion:
27 description: dai-link uses bit clock inversion
28 $ref: /schemas/types.yaml#/definitions/flag
29
30 dai-tdm-slot-num:
31 description: see tdm-slot.txt.
32 $ref: /schemas/types.yaml#/definitions/uint32
33
34 dai-tdm-slot-width:
35 description: see tdm-slot.txt.
36 $ref: /schemas/types.yaml#/definitions/uint32
37
38 system-clock-frequency:
39 description: |
40 If a clock is specified and a multiplication factor is given with
41 mclk-fs, the clock will be set to the calculated mclk frequency
42 when the stream starts.
43 $ref: /schemas/types.yaml#/definitions/uint32
44
45 system-clock-direction-out:
46 description: |
47 specifies clock direction as 'out' on initialization.
48 It is useful for some aCPUs with fixed clocks.
49 $ref: /schemas/types.yaml#/definitions/flag
50
51 system-clock-fixed:
52 description: |
53 Specifies that the clock frequency should not be modified.
54 Implied when system-clock-frequency is specified, but can be used when
55 a clock is mapped to the device whose frequency cannot or should not be
56 changed. When mclk-fs is also specified, this restricts the device to a
57 single fixed sampling rate.
58 $ref: /schemas/types.yaml#/definitions/flag
59
60 mclk-fs:
61 description: |
62 Multiplication factor between stream rate and codec mclk.
63 When defined, mclk-fs property defined in dai-link sub nodes are ignored.
64 $ref: /schemas/types.yaml#/definitions/uint32
65
66 aux-devs:
67 description: |
68 List of phandles pointing to auxiliary devices, such
69 as amplifiers, to be added to the sound card.
70 $ref: /schemas/types.yaml#/definitions/phandle-array
71
72 convert-rate:
73 description: CPU to Codec rate convert.
74 $ref: /schemas/types.yaml#/definitions/uint32
75
76 convert-channels:
77 description: CPU to Codec rate channels.
78 $ref: /schemas/types.yaml#/definitions/uint32
79
80 prefix:
81 description: device name prefix
82 $ref: /schemas/types.yaml#/definitions/string
83
84 label:
85 maxItems: 1
86
87 routing:
88 description: |
89 A list of the connections between audio components.
90 Each entry is a pair of strings, the first being the
91 connection's sink, the second being the connection's source.
92 $ref: /schemas/types.yaml#/definitions/non-unique-string-array
93
94 widgets:
95 description: User specified audio sound widgets.
96 $ref: /schemas/types.yaml#/definitions/non-unique-string-array
97
98 pin-switches:
99 description: the widget names for which pin switches must be created.
100 $ref: /schemas/types.yaml#/definitions/string-array
101
102 format:
103 description: audio format.
104 items:
105 enum:
106 - i2s
107 - right_j
108 - left_j
109 - dsp_a
110 - dsp_b
111 - ac97
112 - pdm
113 - msb
114 - lsb
115
116 dai:
117 type: object
118 properties:
119 sound-dai:
120 maxItems: 1
121
122 # common properties
123 mclk-fs:
124 $ref: "#/definitions/mclk-fs"
125 prefix:
126 $ref: "#/definitions/prefix"
127 frame-inversion:
128 $ref: "#/definitions/frame-inversion"
129 bitclock-inversion:
130 $ref: "#/definitions/bitclock-inversion"
131 frame-master:
132 $ref: /schemas/types.yaml#/definitions/flag
133 bitclock-master:
134 $ref: /schemas/types.yaml#/definitions/flag
135
136 dai-tdm-slot-num:
137 $ref: "#/definitions/dai-tdm-slot-num"
138 dai-tdm-slot-width:
139 $ref: "#/definitions/dai-tdm-slot-width"
140 clocks:
141 maxItems: 1
142 system-clock-frequency:
143 $ref: "#/definitions/system-clock-frequency"
144 system-clock-direction-out:
145 $ref: "#/definitions/system-clock-direction-out"
146 system-clock-fixed:
147 $ref: "#/definitions/system-clock-fixed"
148 required:
149 - sound-dai
150
151 additional-devs:
152 type: object
153 description:
154 Additional devices used by the simple audio card.
155 patternProperties:
156 '^iio-aux(-.+)?$':
157 type: object
158 $ref: audio-iio-aux.yaml#
159
160properties:
161 compatible:
162 contains:
163 enum:
164 - simple-audio-card
165 - simple-scu-audio-card
166
167 "#address-cells":
168 const: 1
169 "#size-cells":
170 const: 0
171
172 label:
173 $ref: "#/definitions/label"
174
175 simple-audio-card,name:
176 description: User specified audio sound card name.
177 $ref: /schemas/types.yaml#/definitions/string
178
179 simple-audio-card,widgets:
180 $ref: "#/definitions/widgets"
181 simple-audio-card,routing:
182 $ref: "#/definitions/routing"
183
184 # common properties
185 simple-audio-card,frame-master:
186 $ref: "#/definitions/frame-master"
187 simple-audio-card,bitclock-master:
188 $ref: "#/definitions/bitclock-master"
189 simple-audio-card,frame-inversion:
190 $ref: "#/definitions/frame-inversion"
191 simple-audio-card,bitclock-inversion:
192 $ref: "#/definitions/bitclock-inversion"
193 simple-audio-card,format:
194 $ref: "#/definitions/format"
195 simple-audio-card,mclk-fs:
196 $ref: "#/definitions/mclk-fs"
197 simple-audio-card,aux-devs:
198 $ref: "#/definitions/aux-devs"
199 simple-audio-card,additional-devs:
200 $ref: "#/definitions/additional-devs"
201 simple-audio-card,convert-rate:
202 $ref: "#/definitions/convert-rate"
203 simple-audio-card,convert-channels:
204 $ref: "#/definitions/convert-channels"
205 simple-audio-card,prefix:
206 $ref: "#/definitions/prefix"
207 simple-audio-card,pin-switches:
208 $ref: "#/definitions/pin-switches"
209 simple-audio-card,hp-det-gpio:
210 maxItems: 1
211 simple-audio-card,mic-det-gpio:
212 maxItems: 1
213
214patternProperties:
215 "^simple-audio-card,cpu(@[0-9a-f]+)?$":
216 $ref: "#/definitions/dai"
217 "^simple-audio-card,codec(@[0-9a-f]+)?$":
218 $ref: "#/definitions/dai"
219 "^simple-audio-card,plat(@[0-9a-f]+)?$":
220 $ref: "#/definitions/dai"
221
222 "^simple-audio-card,dai-link(@[0-9a-f]+)?$":
223 description: |
224 Container for dai-link level properties and the CPU and CODEC sub-nodes.
225 This container may be omitted when the card has only one DAI link.
226 type: object
227 properties:
228 reg:
229 maxItems: 1
230
231 "#address-cells":
232 const: 1
233 "#size-cells":
234 const: 0
235 # common properties
236 frame-master:
237 $ref: "#/definitions/frame-master"
238 bitclock-master:
239 $ref: "#/definitions/bitclock-master"
240 frame-inversion:
241 $ref: "#/definitions/frame-inversion"
242 bitclock-inversion:
243 $ref: "#/definitions/bitclock-inversion"
244 format:
245 $ref: "#/definitions/format"
246 mclk-fs:
247 $ref: "#/definitions/mclk-fs"
248 aux-devs:
249 $ref: "#/definitions/aux-devs"
250 convert-rate:
251 $ref: "#/definitions/convert-rate"
252 convert-channels:
253 $ref: "#/definitions/convert-channels"
254 prefix:
255 $ref: "#/definitions/prefix"
256 pin-switches:
257 $ref: "#/definitions/pin-switches"
258 hp-det-gpio:
259 maxItems: 1
260 mic-det-gpio:
261 maxItems: 1
262
263 patternProperties:
264 "^cpu(-[0-9]+)?$":
265 $ref: "#/definitions/dai"
266 "^codec(-[0-9]+)?$":
267 $ref: "#/definitions/dai"
268 additionalProperties: false
269
270required:
271 - compatible
272
273additionalProperties: false
274
275examples:
276# --------------------
277# single DAI link
278# --------------------
279 - |
280 sound {
281 compatible = "simple-audio-card";
282 simple-audio-card,name = "VF610-Tower-Sound-Card";
283 simple-audio-card,format = "left_j";
284 simple-audio-card,bitclock-master = <&dailink0_master>;
285 simple-audio-card,frame-master = <&dailink0_master>;
286 simple-audio-card,widgets =
287 "Microphone", "Microphone Jack",
288 "Headphone", "Headphone Jack",
289 "Speaker", "External Speaker";
290 simple-audio-card,routing =
291 "MIC_IN", "Microphone Jack",
292 "Headphone Jack", "HP_OUT",
293 "External Speaker", "LINE_OUT";
294
295 simple-audio-card,cpu {
296 sound-dai = <&sh_fsi2 0>;
297 };
298
299 dailink0_master: simple-audio-card,codec {
300 sound-dai = <&ak4648>;
301 clocks = <&osc>;
302 };
303 };
304
305# --------------------
306# Multi DAI links
307# --------------------
308 - |
309 sound {
310 compatible = "simple-audio-card";
311 simple-audio-card,name = "Cubox Audio";
312
313 #address-cells = <1>;
314 #size-cells = <0>;
315
316 simple-audio-card,dai-link@0 { /* I2S - HDMI */
317 reg = <0>;
318 format = "i2s";
319 cpu {
320 sound-dai = <&audio0>;
321 };
322 codec {
323 sound-dai = <&tda998x0>;
324 };
325 };
326
327 simple-audio-card,dai-link@1 { /* S/PDIF - HDMI */
328 reg = <1>;
329 cpu {
330 sound-dai = <&audio1>;
331 };
332 codec {
333 sound-dai = <&tda998x1>;
334 };
335 };
336
337 simple-audio-card,dai-link@2 { /* S/PDIF - S/PDIF */
338 reg = <2>;
339 cpu {
340 sound-dai = <&audio2>;
341 };
342 codec {
343 sound-dai = <&spdif_codec>;
344 };
345 };
346 };
347
348# --------------------
349# route audio from IMX6 SSI2 through TLV320DAC3100 codec
350# through TPA6130A2 amplifier to headphones:
351# --------------------
352 - |
353 sound {
354 compatible = "simple-audio-card";
355
356 simple-audio-card,widgets =
357 "Headphone", "Headphone Jack";
358 simple-audio-card,routing =
359 "Headphone Jack", "HPLEFT",
360 "Headphone Jack", "HPRIGHT",
361 "LEFTIN", "HPL",
362 "RIGHTIN", "HPR";
363 simple-audio-card,aux-devs = <&amp>;
364 simple-audio-card,cpu {
365 sound-dai = <&ssi2>;
366 };
367 simple-audio-card,codec {
368 sound-dai = <&codec>;
369 clocks = <&clocks>;
370 };
371 };
372
373# --------------------
374# route audio to/from a codec through an amplifier
375# designed with a potentiometer driven by IIO:
376# --------------------
377 - |
378 sound {
379 compatible = "simple-audio-card";
380
381 simple-audio-card,aux-devs = <&amp_in>, <&amp_out>;
382 simple-audio-card,routing =
383 "CODEC LEFTIN", "AMP_IN LEFT OUT",
384 "CODEC RIGHTIN", "AMP_IN RIGHT OUT",
385 "AMP_OUT LEFT IN", "CODEC LEFTOUT",
386 "AMP_OUT RIGHT IN", "CODEC RIGHTOUT";
387
388 simple-audio-card,additional-devs {
389 amp_out: iio-aux-out {
390 compatible = "audio-iio-aux";
391 io-channels = <&pot_out 0>, <&pot_out 1>;
392 io-channel-names = "LEFT", "RIGHT";
393 snd-control-invert-range = <1 1>;
394 sound-name-prefix = "AMP_OUT";
395 };
396
397 amp_in: iio_aux-in {
398 compatible = "audio-iio-aux";
399 io-channels = <&pot_in 0>, <&pot_in 1>;
400 io-channel-names = "LEFT", "RIGHT";
401 sound-name-prefix = "AMP_IN";
402 };
403 };
404
405 simple-audio-card,cpu {
406 sound-dai = <&cpu>;
407 };
408
409 simple-audio-card,codec {
410 sound-dai = <&codec>;
411 clocks = <&clocks>;
412 };
413 };
414
415# --------------------
416# Sampling Rate Conversion
417# --------------------
418 - |
419 sound {
420 compatible = "simple-audio-card";
421
422 simple-audio-card,name = "rsnd-ak4643";
423 simple-audio-card,format = "left_j";
424 simple-audio-card,bitclock-master = <&sndcodec>;
425 simple-audio-card,frame-master = <&sndcodec>;
426
427 simple-audio-card,convert-rate = <48000>;
428
429 simple-audio-card,prefix = "ak4642";
430 simple-audio-card,routing = "ak4642 Playback", "DAI0 Playback",
431 "DAI0 Capture", "ak4642 Capture";
432
433 sndcpu: simple-audio-card,cpu {
434 sound-dai = <&rcar_sound>;
435 };
436
437 sndcodec: simple-audio-card,codec {
438 sound-dai = <&ak4643>;
439 system-clock-frequency = <11289600>;
440 };
441 };
442
443# --------------------
444# 2 CPU 1 Codec (Mixing)
445# --------------------
446 - |
447 sound {
448 compatible = "simple-audio-card";
449 #address-cells = <1>;
450 #size-cells = <0>;
451
452 simple-audio-card,name = "rsnd-ak4643";
453 simple-audio-card,format = "left_j";
454 simple-audio-card,bitclock-master = <&dpcmcpu>;
455 simple-audio-card,frame-master = <&dpcmcpu>;
456
457 simple-audio-card,convert-rate = <48000>;
458 simple-audio-card,convert-channels = <2>;
459
460 simple-audio-card,routing = "ak4642 Playback", "DAI0 Playback",
461 "ak4642 Playback", "DAI1 Playback";
462
463 dpcmcpu: simple-audio-card,cpu@0 {
464 reg = <0>;
465 sound-dai = <&rcar_sound 0>;
466 };
467
468 simple-audio-card,cpu@1 {
469 reg = <1>;
470 sound-dai = <&rcar_sound 1>;
471 };
472
473 simple-audio-card,codec {
474 prefix = "ak4642";
475 sound-dai = <&ak4643>;
476 clocks = <&audio_clock>;
477 };
478 };
479
480# --------------------
481# Multi DAI links with DPCM:
482#
483# CPU0 ------ ak4613
484# CPU1 ------ PCM3168A-p /* DPCM 1ch/2ch */
485# CPU2 --/ /* DPCM 3ch/4ch */
486# CPU3 --/ /* DPCM 5ch/6ch */
487# CPU4 --/ /* DPCM 7ch/8ch */
488# CPU5 ------ PCM3168A-c
489# --------------------
490 - |
491 sound {
492 compatible = "simple-audio-card";
493 #address-cells = <1>;
494 #size-cells = <0>;
495
496 simple-audio-card,routing =
497 "pcm3168a Playback", "DAI1 Playback",
498 "pcm3168a Playback", "DAI2 Playback",
499 "pcm3168a Playback", "DAI3 Playback",
500 "pcm3168a Playback", "DAI4 Playback";
501
502 simple-audio-card,dai-link@0 {
503 reg = <0>;
504 format = "left_j";
505 bitclock-master = <&sndcpu0>;
506 frame-master = <&sndcpu0>;
507
508 sndcpu0: cpu {
509 sound-dai = <&rcar_sound 0>;
510 };
511 codec {
512 sound-dai = <&ak4613>;
513 };
514 };
515
516 simple-audio-card,dai-link@1 {
517 reg = <1>;
518 format = "i2s";
519 bitclock-master = <&sndcpu1>;
520 frame-master = <&sndcpu1>;
521
522 convert-channels = <8>; /* TDM Split */
523
524 sndcpu1: cpu-0 {
525 sound-dai = <&rcar_sound 1>;
526 };
527 cpu-1 {
528 sound-dai = <&rcar_sound 2>;
529 };
530 cpu-2 {
531 sound-dai = <&rcar_sound 3>;
532 };
533 cpu-3 {
534 sound-dai = <&rcar_sound 4>;
535 };
536 codec {
537 mclk-fs = <512>;
538 prefix = "pcm3168a";
539 dai-tdm-slot-num = <8>;
540 sound-dai = <&pcm3168a 0>;
541 };
542 };
543
544 simple-audio-card,dai-link@2 {
545 reg = <2>;
546 format = "i2s";
547 bitclock-master = <&sndcpu2>;
548 frame-master = <&sndcpu2>;
549
550 sndcpu2: cpu {
551 sound-dai = <&rcar_sound 5>;
552 };
553 codec {
554 mclk-fs = <512>;
555 prefix = "pcm3168a";
556 sound-dai = <&pcm3168a 1>;
557 };
558 };
559 };