GNU Linux-libre 6.1.90-gnu
[releases.git] / Documentation / devicetree / bindings / sound / simple-card.yaml
1 # 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
7 title: Simple Audio Card Driver
8
9 maintainers:
10   - Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
11
12 definitions:
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 properties:
152   compatible:
153     contains:
154       enum:
155         - simple-audio-card
156         - simple-scu-audio-card
157
158   "#address-cells":
159     const: 1
160   "#size-cells":
161     const: 0
162
163   label:
164     $ref: "#/definitions/label"
165
166   simple-audio-card,name:
167     description: User specified audio sound card name.
168     $ref: /schemas/types.yaml#/definitions/string
169
170   simple-audio-card,widgets:
171     $ref: "#/definitions/widgets"
172   simple-audio-card,routing:
173     $ref: "#/definitions/routing"
174
175   # common properties
176   simple-audio-card,frame-master:
177     $ref: "#/definitions/frame-master"
178   simple-audio-card,bitclock-master:
179     $ref: "#/definitions/bitclock-master"
180   simple-audio-card,frame-inversion:
181     $ref: "#/definitions/frame-inversion"
182   simple-audio-card,bitclock-inversion:
183     $ref: "#/definitions/bitclock-inversion"
184   simple-audio-card,format:
185     $ref: "#/definitions/format"
186   simple-audio-card,mclk-fs:
187     $ref: "#/definitions/mclk-fs"
188   simple-audio-card,aux-devs:
189     $ref: "#/definitions/aux-devs"
190   simple-audio-card,convert-rate:
191     $ref: "#/definitions/convert-rate"
192   simple-audio-card,convert-channels:
193     $ref: "#/definitions/convert-channels"
194   simple-audio-card,prefix:
195     $ref: "#/definitions/prefix"
196   simple-audio-card,pin-switches:
197     $ref: "#/definitions/pin-switches"
198   simple-audio-card,hp-det-gpio:
199     maxItems: 1
200   simple-audio-card,mic-det-gpio:
201     maxItems: 1
202
203 patternProperties:
204   "^simple-audio-card,cpu(@[0-9a-f]+)?$":
205     $ref: "#/definitions/dai"
206   "^simple-audio-card,codec(@[0-9a-f]+)?$":
207     $ref: "#/definitions/dai"
208
209   "^simple-audio-card,dai-link(@[0-9a-f]+)?$":
210     description: |
211       Container for dai-link level properties and the CPU and CODEC sub-nodes.
212       This container may be omitted when the card has only one DAI link.
213     type: object
214     properties:
215       reg:
216         maxItems: 1
217
218       # common properties
219       frame-master:
220         $ref: "#/definitions/frame-master"
221       bitclock-master:
222         $ref: "#/definitions/bitclock-master"
223       frame-inversion:
224         $ref: "#/definitions/frame-inversion"
225       bitclock-inversion:
226         $ref: "#/definitions/bitclock-inversion"
227       format:
228         $ref: "#/definitions/format"
229       mclk-fs:
230         $ref: "#/definitions/mclk-fs"
231       aux-devs:
232         $ref: "#/definitions/aux-devs"
233       convert-rate:
234         $ref: "#/definitions/convert-rate"
235       convert-channels:
236         $ref: "#/definitions/convert-channels"
237       prefix:
238         $ref: "#/definitions/prefix"
239       pin-switches:
240         $ref: "#/definitions/pin-switches"
241       hp-det-gpio:
242         maxItems: 1
243       mic-det-gpio:
244         maxItems: 1
245
246     patternProperties:
247       "^cpu(@[0-9a-f]+)?":
248         $ref: "#/definitions/dai"
249       "^codec(@[0-9a-f]+)?":
250         $ref: "#/definitions/dai"
251     additionalProperties: false
252
253 required:
254   - compatible
255
256 additionalProperties: false
257
258 examples:
259 #--------------------
260 # single DAI link
261 #--------------------
262   - |
263     sound {
264         compatible = "simple-audio-card";
265         simple-audio-card,name = "VF610-Tower-Sound-Card";
266         simple-audio-card,format = "left_j";
267         simple-audio-card,bitclock-master = <&dailink0_master>;
268         simple-audio-card,frame-master = <&dailink0_master>;
269         simple-audio-card,widgets =
270                 "Microphone", "Microphone Jack",
271                 "Headphone", "Headphone Jack",
272                 "Speaker", "External Speaker";
273         simple-audio-card,routing =
274                 "MIC_IN", "Microphone Jack",
275                 "Headphone Jack", "HP_OUT",
276                 "External Speaker", "LINE_OUT";
277
278         simple-audio-card,cpu {
279             sound-dai = <&sh_fsi2 0>;
280         };
281
282         dailink0_master: simple-audio-card,codec {
283             sound-dai = <&ak4648>;
284             clocks = <&osc>;
285         };
286     };
287
288 #--------------------
289 # Multi DAI links
290 #--------------------
291   - |
292     sound {
293         compatible = "simple-audio-card";
294         simple-audio-card,name = "Cubox Audio";
295
296         #address-cells = <1>;
297         #size-cells = <0>;
298
299         simple-audio-card,dai-link@0 {          /* I2S - HDMI */
300             reg = <0>;
301             format = "i2s";
302             cpu {
303                 sound-dai = <&audio0>;
304             };
305             codec {
306                 sound-dai = <&tda998x0>;
307             };
308         };
309
310         simple-audio-card,dai-link@1 {          /* S/PDIF - HDMI */
311             reg = <1>;
312             cpu {
313                 sound-dai = <&audio1>;
314             };
315             codec {
316                 sound-dai = <&tda998x1>;
317             };
318         };
319
320         simple-audio-card,dai-link@2 {          /* S/PDIF - S/PDIF */
321             reg = <2>;
322             cpu {
323                 sound-dai = <&audio2>;
324             };
325             codec {
326                 sound-dai = <&spdif_codec>;
327             };
328         };
329     };
330
331 #--------------------
332 # route audio from IMX6 SSI2 through TLV320DAC3100 codec
333 # through TPA6130A2 amplifier to headphones:
334 #--------------------
335   - |
336     sound {
337         compatible = "simple-audio-card";
338
339         simple-audio-card,widgets =
340             "Headphone", "Headphone Jack";
341         simple-audio-card,routing =
342             "Headphone Jack", "HPLEFT",
343             "Headphone Jack", "HPRIGHT",
344             "LEFTIN", "HPL",
345             "RIGHTIN", "HPR";
346         simple-audio-card,aux-devs = <&amp>;
347         simple-audio-card,cpu {
348             sound-dai = <&ssi2>;
349         };
350         simple-audio-card,codec {
351             sound-dai = <&codec>;
352             clocks = <&clocks>;
353         };
354     };
355
356 #--------------------
357 # Sampling Rate Conversion
358 #--------------------
359   - |
360     sound {
361         compatible = "simple-audio-card";
362
363         simple-audio-card,name = "rsnd-ak4643";
364         simple-audio-card,format = "left_j";
365         simple-audio-card,bitclock-master = <&sndcodec>;
366         simple-audio-card,frame-master = <&sndcodec>;
367
368         simple-audio-card,convert-rate = <48000>;
369
370         simple-audio-card,prefix = "ak4642";
371         simple-audio-card,routing = "ak4642 Playback", "DAI0 Playback",
372                                     "DAI0 Capture", "ak4642 Capture";
373
374         sndcpu: simple-audio-card,cpu {
375             sound-dai = <&rcar_sound>;
376         };
377
378         sndcodec: simple-audio-card,codec {
379             sound-dai = <&ak4643>;
380             system-clock-frequency = <11289600>;
381         };
382     };
383
384 #--------------------
385 # 2 CPU 1 Codec (Mixing)
386 #--------------------
387   - |
388     sound {
389         compatible = "simple-audio-card";
390         #address-cells = <1>;
391         #size-cells = <0>;
392
393         simple-audio-card,name = "rsnd-ak4643";
394         simple-audio-card,format = "left_j";
395         simple-audio-card,bitclock-master = <&dpcmcpu>;
396         simple-audio-card,frame-master = <&dpcmcpu>;
397
398         simple-audio-card,convert-rate = <48000>;
399         simple-audio-card,convert-channels = <2>;
400
401         simple-audio-card,routing = "ak4642 Playback", "DAI0 Playback",
402                                     "ak4642 Playback", "DAI1 Playback";
403
404         dpcmcpu: simple-audio-card,cpu@0 {
405             reg = <0>;
406             sound-dai = <&rcar_sound 0>;
407         };
408
409         simple-audio-card,cpu@1 {
410             reg = <1>;
411             sound-dai = <&rcar_sound 1>;
412         };
413
414         simple-audio-card,codec {
415             prefix = "ak4642";
416             sound-dai = <&ak4643>;
417             clocks = <&audio_clock>;
418         };
419     };
420
421 #--------------------
422 # Multi DAI links with DPCM:
423 #
424 # CPU0 ------ ak4613
425 # CPU1 ------ PCM3168A-p  /* DPCM 1ch/2ch */
426 # CPU2 --/                /* DPCM 3ch/4ch */
427 # CPU3 --/                /* DPCM 5ch/6ch */
428 # CPU4 --/                /* DPCM 7ch/8ch */
429 # CPU5 ------ PCM3168A-c
430 #--------------------
431   - |
432     sound {
433         compatible = "simple-audio-card";
434         #address-cells = <1>;
435         #size-cells = <0>;
436
437         simple-audio-card,routing =
438             "pcm3168a Playback", "DAI1 Playback",
439             "pcm3168a Playback", "DAI2 Playback",
440             "pcm3168a Playback", "DAI3 Playback",
441             "pcm3168a Playback", "DAI4 Playback";
442
443         simple-audio-card,dai-link@0 {
444             reg = <0>;
445             format = "left_j";
446             bitclock-master = <&sndcpu0>;
447             frame-master = <&sndcpu0>;
448
449             sndcpu0: cpu {
450                 sound-dai = <&rcar_sound 0>;
451             };
452             codec {
453                 sound-dai = <&ak4613>;
454             };
455         };
456
457         simple-audio-card,dai-link@1 {
458             reg = <1>;
459             format = "i2s";
460             bitclock-master = <&sndcpu1>;
461             frame-master = <&sndcpu1>;
462
463             convert-channels = <8>; /* TDM Split */
464
465             sndcpu1: cpu0 {
466                 sound-dai = <&rcar_sound 1>;
467             };
468             cpu1 {
469                 sound-dai = <&rcar_sound 2>;
470             };
471             cpu2 {
472                 sound-dai = <&rcar_sound 3>;
473             };
474             cpu3 {
475                 sound-dai = <&rcar_sound 4>;
476             };
477             codec {
478                 mclk-fs = <512>;
479                 prefix = "pcm3168a";
480                 dai-tdm-slot-num = <8>;
481                 sound-dai = <&pcm3168a 0>;
482             };
483         };
484
485         simple-audio-card,dai-link@2 {
486             reg = <2>;
487             format = "i2s";
488             bitclock-master = <&sndcpu2>;
489             frame-master = <&sndcpu2>;
490
491             sndcpu2: cpu {
492                 sound-dai = <&rcar_sound 5>;
493             };
494             codec {
495                 mclk-fs = <512>;
496                 prefix = "pcm3168a";
497                 sound-dai = <&pcm3168a 1>;
498             };
499         };
500     };