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