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
7title: Simple Audio Card Driver Device Tree Bindings
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  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
140properties:
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
160patternProperties:
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
242required:
243  - compatible
244
245additionalProperties: false
246
247examples:
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    };
490