Merge tag 'docs-5.11-2' of git://git.lwn.net/linux
[linux-2.6-microblaze.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 Device Tree Bindings
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   mclk-fs:
52     description: |
53       Multiplication factor between stream rate and codec mclk.
54       When defined, mclk-fs property defined in dai-link sub nodes are ignored.
55     $ref: /schemas/types.yaml#/definitions/uint32
56
57   aux-devs:
58     description: |
59       List of phandles pointing to auxiliary devices, such
60       as amplifiers, to be added to the sound card.
61     $ref: /schemas/types.yaml#/definitions/phandle-array
62
63   convert-rate:
64     description: CPU to Codec rate convert.
65     $ref: /schemas/types.yaml#/definitions/uint32
66
67   convert-channels:
68     description: CPU to Codec rate channels.
69     $ref: /schemas/types.yaml#/definitions/uint32
70
71   prefix:
72     description: "device name prefix"
73     $ref: /schemas/types.yaml#/definitions/string
74
75   label:
76     maxItems: 1
77
78   routing:
79     description: |
80       A list of the connections between audio components.
81       Each entry is a pair of strings, the first being the
82       connection's sink, the second being the connection's source.
83     $ref: /schemas/types.yaml#/definitions/non-unique-string-array
84
85   widgets:
86     description: User specified audio sound widgets.
87     $ref: /schemas/types.yaml#/definitions/non-unique-string-array
88
89   pin-switches:
90     description: the widget names for which pin switches must be created.
91     $ref: /schemas/types.yaml#/definitions/string-array
92
93   format:
94     description: audio format.
95     items:
96       enum:
97         - i2s
98         - right_j
99         - left_j
100         - dsp_a
101         - dsp_b
102         - ac97
103         - pdm
104         - msb
105         - lsb
106
107   dai:
108     type: object
109     properties:
110       sound-dai:
111         maxItems: 1
112
113       # common properties
114       mclk-fs:
115         $ref: "#/definitions/mclk-fs"
116       prefix:
117         $ref: "#/definitions/prefix"
118       frame-inversion:
119         $ref: "#/definitions/frame-inversion"
120       bitclock-inversion:
121         $ref: "#/definitions/bitclock-inversion"
122       frame-master:
123         $ref: /schemas/types.yaml#/definitions/flag
124       bitclock-master:
125         $ref: /schemas/types.yaml#/definitions/flag
126
127       dai-tdm-slot-num:
128         $ref: "#/definitions/dai-tdm-slot-num"
129       dai-tdm-slot-width:
130         $ref: "#/definitions/dai-tdm-slot-width"
131       clocks:
132         maxItems: 1
133       system-clock-frequency:
134         $ref: "#/definitions/system-clock-frequency"
135       system-clock-direction-out:
136         $ref: "#/definitions/system-clock-direction-out"
137     required:
138       - sound-dai
139
140 properties:
141   compatible:
142     contains:
143       enum:
144         - simple-audio-card
145         - simple-scu-audio-card
146
147   "#address-cells":
148     const: 1
149   "#size-cells":
150     const: 0
151
152   label:
153     $ref: "#/definitions/label"
154
155   simple-audio-card,name:
156     description: User specified audio sound card name.
157     $ref: /schemas/types.yaml#/definitions/string
158
159 # use patternProperties to avoid naming "xxx,yyy" issue
160 patternProperties:
161   "^simple-audio-card,widgets$":
162     $ref: "#/definitions/widgets"
163   "^simple-audio-card,routing$":
164     $ref: "#/definitions/routing"
165   "^simple-audio-card,cpu(@[0-9a-f]+)?":
166     $ref: "#/definitions/dai"
167   "^simple-audio-card,codec(@[0-9a-f]+)?":
168     $ref: "#/definitions/dai"
169
170   # common properties
171   "^simple-audio-card,frame-master$":
172     $ref: "#/definitions/frame-master"
173   "^simple-audio-card,bitclock-master$":
174     $ref: "#/definitions/bitclock-master"
175   "^simple-audio-card,frame-inversion$":
176     $ref: "#/definitions/frame-inversion"
177   "^simple-audio-card,bitclock-inversion$":
178     $ref: "#/definitions/bitclock-inversion"
179   "^simple-audio-card,format$":
180     $ref: "#/definitions/format"
181   "^simple-audio-card,mclk-fs$":
182     $ref: "#/definitions/mclk-fs"
183   "^simple-audio-card,aux-devs$":
184     $ref: "#/definitions/aux-devs"
185   "^simple-audio-card,convert-rate$":
186     $ref: "#/definitions/convert-rate"
187   "^simple-audio-card,convert-channels$":
188     $ref: "#/definitions/convert-channels"
189   "^simple-audio-card,prefix$":
190     $ref: "#/definitions/prefix"
191   "^simple-audio-card,pin-switches$":
192     $ref: "#/definitions/pin-switches"
193   "^simple-audio-card,hp-det-gpio$":
194     maxItems: 1
195   "^simple-audio-card,mic-det-gpio$":
196     maxItems: 1
197
198   "^simple-audio-card,dai-link(@[0-9a-f]+)?$":
199     description: |
200       Container for dai-link level properties and the CPU and CODEC sub-nodes.
201       This container may be omitted when the card has only one DAI link.
202     type: object
203     properties:
204       reg:
205         maxItems: 1
206
207       # common properties
208       frame-master:
209         $ref: "#/definitions/frame-master"
210       bitclock-master:
211         $ref: "#/definitions/bitclock-master"
212       frame-inversion:
213         $ref: "#/definitions/frame-inversion"
214       bitclock-inversion:
215         $ref: "#/definitions/bitclock-inversion"
216       format:
217         $ref: "#/definitions/format"
218       mclk-fs:
219         $ref: "#/definitions/mclk-fs"
220       aux-devs:
221         $ref: "#/definitions/aux-devs"
222       convert-rate:
223         $ref: "#/definitions/convert-rate"
224       convert-channels:
225         $ref: "#/definitions/convert-channels"
226       prefix:
227         $ref: "#/definitions/prefix"
228       pin-switches:
229         $ref: "#/definitions/pin-switches"
230       hp-det-gpio:
231         maxItems: 1
232       mic-det-gpio:
233         maxItems: 1
234
235     patternProperties:
236       "^cpu(@[0-9a-f]+)?":
237         $ref: "#/definitions/dai"
238       "^codec(@[0-9a-f]+)?":
239         $ref: "#/definitions/dai"
240     additionalProperties: false
241
242 required:
243   - compatible
244
245 additionalProperties: false
246
247 examples:
248 #--------------------
249 # single DAI link
250 #--------------------
251   - |
252     sound {
253         compatible = "simple-audio-card";
254         simple-audio-card,name = "VF610-Tower-Sound-Card";
255         simple-audio-card,format = "left_j";
256         simple-audio-card,bitclock-master = <&dailink0_master>;
257         simple-audio-card,frame-master = <&dailink0_master>;
258         simple-audio-card,widgets =
259                 "Microphone", "Microphone Jack",
260                 "Headphone", "Headphone Jack",
261                 "Speaker", "External Speaker";
262         simple-audio-card,routing =
263                 "MIC_IN", "Microphone Jack",
264                 "Headphone Jack", "HP_OUT",
265                 "External Speaker", "LINE_OUT";
266
267         simple-audio-card,cpu {
268             sound-dai = <&sh_fsi2 0>;
269         };
270
271         dailink0_master: simple-audio-card,codec {
272             sound-dai = <&ak4648>;
273             clocks = <&osc>;
274         };
275     };
276
277 #--------------------
278 # Multi DAI links
279 #--------------------
280   - |
281     sound {
282         compatible = "simple-audio-card";
283         simple-audio-card,name = "Cubox Audio";
284
285         #address-cells = <1>;
286         #size-cells = <0>;
287
288         simple-audio-card,dai-link@0 {          /* I2S - HDMI */
289             reg = <0>;
290             format = "i2s";
291             cpu {
292                 sound-dai = <&audio0>;
293             };
294             codec {
295                 sound-dai = <&tda998x0>;
296             };
297         };
298
299         simple-audio-card,dai-link@1 {          /* S/PDIF - HDMI */
300             reg = <1>;
301             cpu {
302                 sound-dai = <&audio1>;
303             };
304             codec {
305                 sound-dai = <&tda998x1>;
306             };
307         };
308
309         simple-audio-card,dai-link@2 {          /* S/PDIF - S/PDIF */
310             reg = <2>;
311             cpu {
312                 sound-dai = <&audio2>;
313             };
314             codec {
315                 sound-dai = <&spdif_codec>;
316             };
317         };
318     };
319
320 #--------------------
321 # route audio from IMX6 SSI2 through TLV320DAC3100 codec
322 # through TPA6130A2 amplifier to headphones:
323 #--------------------
324   - |
325     sound {
326         compatible = "simple-audio-card";
327
328         simple-audio-card,widgets =
329             "Headphone", "Headphone Jack";
330         simple-audio-card,routing =
331             "Headphone Jack", "HPLEFT",
332             "Headphone Jack", "HPRIGHT",
333             "LEFTIN", "HPL",
334             "RIGHTIN", "HPR";
335         simple-audio-card,aux-devs = <&amp>;
336         simple-audio-card,cpu {
337             sound-dai = <&ssi2>;
338         };
339         simple-audio-card,codec {
340             sound-dai = <&codec>;
341             clocks = <&clocks>;
342         };
343     };
344
345 #--------------------
346 # Sampling Rate Conversion
347 #--------------------
348   - |
349     sound {
350         compatible = "simple-audio-card";
351
352         simple-audio-card,name = "rsnd-ak4643";
353         simple-audio-card,format = "left_j";
354         simple-audio-card,bitclock-master = <&sndcodec>;
355         simple-audio-card,frame-master = <&sndcodec>;
356
357         simple-audio-card,convert-rate = <48000>;
358
359         simple-audio-card,prefix = "ak4642";
360         simple-audio-card,routing = "ak4642 Playback", "DAI0 Playback",
361                                     "DAI0 Capture", "ak4642 Capture";
362
363         sndcpu: simple-audio-card,cpu {
364             sound-dai = <&rcar_sound>;
365         };
366
367         sndcodec: simple-audio-card,codec {
368             sound-dai = <&ak4643>;
369             system-clock-frequency = <11289600>;
370         };
371     };
372
373 #--------------------
374 # 2 CPU 1 Codec (Mixing)
375 #--------------------
376   - |
377     sound {
378         compatible = "simple-audio-card";
379         #address-cells = <1>;
380         #size-cells = <0>;
381
382         simple-audio-card,name = "rsnd-ak4643";
383         simple-audio-card,format = "left_j";
384         simple-audio-card,bitclock-master = <&dpcmcpu>;
385         simple-audio-card,frame-master = <&dpcmcpu>;
386
387         simple-audio-card,convert-rate = <48000>;
388         simple-audio-card,convert-channels = <2>;
389
390         simple-audio-card,routing = "ak4642 Playback", "DAI0 Playback",
391                                     "ak4642 Playback", "DAI1 Playback";
392
393         dpcmcpu: simple-audio-card,cpu@0 {
394             reg = <0>;
395             sound-dai = <&rcar_sound 0>;
396         };
397
398         simple-audio-card,cpu@1 {
399             reg = <1>;
400             sound-dai = <&rcar_sound 1>;
401         };
402
403         simple-audio-card,codec {
404             prefix = "ak4642";
405             sound-dai = <&ak4643>;
406             clocks = <&audio_clock>;
407         };
408     };
409
410 #--------------------
411 # Multi DAI links with DPCM:
412 #
413 # CPU0 ------ ak4613
414 # CPU1 ------ PCM3168A-p  /* DPCM 1ch/2ch */
415 # CPU2 --/                /* DPCM 3ch/4ch */
416 # CPU3 --/                /* DPCM 5ch/6ch */
417 # CPU4 --/                /* DPCM 7ch/8ch */
418 # CPU5 ------ PCM3168A-c
419 #--------------------
420   - |
421     sound {
422         compatible = "simple-audio-card";
423         #address-cells = <1>;
424         #size-cells = <0>;
425
426         simple-audio-card,routing =
427             "pcm3168a Playback", "DAI1 Playback",
428             "pcm3168a Playback", "DAI2 Playback",
429             "pcm3168a Playback", "DAI3 Playback",
430             "pcm3168a Playback", "DAI4 Playback";
431
432         simple-audio-card,dai-link@0 {
433             reg = <0>;
434             format = "left_j";
435             bitclock-master = <&sndcpu0>;
436             frame-master = <&sndcpu0>;
437
438             sndcpu0: cpu {
439                 sound-dai = <&rcar_sound 0>;
440             };
441             codec {
442                 sound-dai = <&ak4613>;
443             };
444         };
445
446         simple-audio-card,dai-link@1 {
447             reg = <1>;
448             format = "i2s";
449             bitclock-master = <&sndcpu1>;
450             frame-master = <&sndcpu1>;
451
452             convert-channels = <8>; /* TDM Split */
453
454             sndcpu1: cpu0 {
455                 sound-dai = <&rcar_sound 1>;
456             };
457             cpu1 {
458                 sound-dai = <&rcar_sound 2>;
459             };
460             cpu2 {
461                 sound-dai = <&rcar_sound 3>;
462             };
463             cpu3 {
464                 sound-dai = <&rcar_sound 4>;
465             };
466             codec {
467                 mclk-fs = <512>;
468                 prefix = "pcm3168a";
469                 dai-tdm-slot-num = <8>;
470                 sound-dai = <&pcm3168a 0>;
471             };
472         };
473
474         simple-audio-card,dai-link@2 {
475             reg = <2>;
476             format = "i2s";
477             bitclock-master = <&sndcpu2>;
478             frame-master = <&sndcpu2>;
479
480             sndcpu2: cpu {
481                 sound-dai = <&rcar_sound 5>;
482             };
483             codec {
484                 mclk-fs = <512>;
485                 prefix = "pcm3168a";
486                 sound-dai = <&pcm3168a 1>;
487             };
488         };
489     };