xref: /linux/Documentation/devicetree/bindings/sound/renesas,rsnd.yaml (revision 96f30c8f0aa9923aa39b30bcaefeacf88b490231)
1# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/sound/renesas,rsnd.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: Renesas R-Car Sound Driver
8
9maintainers:
10  - Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
11
12properties:
13
14  compatible:
15    oneOf:
16      # for Gen1 SoC
17      - items:
18          - enum:
19              - renesas,rcar_sound-r8a7778   # R-Car M1A
20              - renesas,rcar_sound-r8a7779   # R-Car H1
21          - const: renesas,rcar_sound-gen1
22      # for Gen2 SoC
23      - items:
24          - enum:
25              - renesas,rcar_sound-r8a7742   # RZ/G1H
26              - renesas,rcar_sound-r8a7743   # RZ/G1M
27              - renesas,rcar_sound-r8a7744   # RZ/G1N
28              - renesas,rcar_sound-r8a7745   # RZ/G1E
29              - renesas,rcar_sound-r8a77470  # RZ/G1C
30              - renesas,rcar_sound-r8a7790   # R-Car H2
31              - renesas,rcar_sound-r8a7791   # R-Car M2-W
32              - renesas,rcar_sound-r8a7793   # R-Car M2-N
33              - renesas,rcar_sound-r8a7794   # R-Car E2
34          - const: renesas,rcar_sound-gen2
35      # for Gen3 SoC
36      - items:
37          - enum:
38              - renesas,rcar_sound-r8a774a1  # RZ/G2M
39              - renesas,rcar_sound-r8a774b1  # RZ/G2N
40              - renesas,rcar_sound-r8a774c0  # RZ/G2E
41              - renesas,rcar_sound-r8a774e1  # RZ/G2H
42              - renesas,rcar_sound-r8a7795   # R-Car H3
43              - renesas,rcar_sound-r8a7796   # R-Car M3-W
44              - renesas,rcar_sound-r8a77961  # R-Car M3-W+
45              - renesas,rcar_sound-r8a77965  # R-Car M3-N
46              - renesas,rcar_sound-r8a77990  # R-Car E3
47              - renesas,rcar_sound-r8a77995  # R-Car D3
48          - const: renesas,rcar_sound-gen3
49      # for Gen4 SoC
50      - items:
51          - enum:
52              - renesas,rcar_sound-r8a779g0  # R-Car V4H
53              - renesas,rcar_sound-r8a779h0  # R-Car V4M
54          - const: renesas,rcar_sound-gen4
55      # for Generic
56      - enum:
57          - renesas,rcar_sound-gen1
58          - renesas,rcar_sound-gen2
59          - renesas,rcar_sound-gen3
60          - renesas,rcar_sound-gen4
61
62  reg:
63    minItems: 1
64    maxItems: 5
65
66  reg-names:
67    minItems: 1
68    maxItems: 5
69
70  "#sound-dai-cells":
71    description: |
72      it must be 0 if your system is using single DAI
73      it must be 1 if your system is using multi  DAIs
74      This is used on simple-audio-card
75    enum: [0, 1]
76
77  "#clock-cells":
78    description: |
79      it must be 0 if your system has audio_clkout
80      it must be 1 if your system has audio_clkout0/1/2/3
81    enum: [0, 1]
82
83  "#address-cells":
84    const: 1
85
86  "#size-cells":
87    const: 0
88
89  clock-frequency:
90    description: for audio_clkout0/1/2/3
91
92  clkout-lr-asynchronous:
93    description: audio_clkoutn is asynchronizes with lr-clock.
94    $ref: /schemas/types.yaml#/definitions/flag
95
96  power-domains: true
97
98  resets:
99    minItems: 1
100    maxItems: 11
101
102  reset-names:
103    minItems: 1
104    maxItems: 11
105
106  clocks:
107    description: References to SSI/SRC/MIX/CTU/DVC/AUDIO_CLK clocks.
108    minItems: 1
109    maxItems: 31
110
111  clock-names:
112    description: List of necessary clock names.
113    # details are defined below
114
115  # ports is below
116  port:
117    $ref: audio-graph-port.yaml#/definitions/port-base
118    unevaluatedProperties: false
119    patternProperties:
120      "^endpoint(@[0-9a-f]+)?":
121        $ref: audio-graph-port.yaml#/definitions/endpoint-base
122        properties:
123          playback:
124            $ref: /schemas/types.yaml#/definitions/phandle-array
125          capture:
126            $ref: /schemas/types.yaml#/definitions/phandle-array
127        unevaluatedProperties: false
128
129  rcar_sound,dvc:
130    description: DVC subnode.
131    type: object
132    patternProperties:
133      "^dvc-[0-1]$":
134        type: object
135        additionalProperties: false
136
137        properties:
138          dmas:
139            maxItems: 1
140          dma-names:
141            const: tx
142        required:
143          - dmas
144          - dma-names
145    additionalProperties: false
146
147  rcar_sound,mix:
148    description: MIX subnode.
149    type: object
150    patternProperties:
151      "^mix-[0-1]$":
152        type: object
153        additionalProperties: false
154    additionalProperties: false
155
156  rcar_sound,ctu:
157    description: CTU subnode.
158    type: object
159    patternProperties:
160      "^ctu-[0-7]$":
161        type: object
162        additionalProperties: false
163    additionalProperties: false
164
165  rcar_sound,src:
166    description: SRC subnode.
167    type: object
168    patternProperties:
169      "^src-[0-9]$":
170        type: object
171        additionalProperties: false
172
173        properties:
174          interrupts:
175            maxItems: 1
176          dmas:
177            maxItems: 2
178          dma-names:
179            allOf:
180              - items:
181                  enum:
182                    - tx
183                    - rx
184    additionalProperties: false
185
186  rcar_sound,ssiu:
187    description: SSIU subnode.
188    type: object
189    patternProperties:
190      "^ssiu-[0-9]+$":
191        type: object
192        additionalProperties: false
193
194        properties:
195          dmas:
196            maxItems: 2
197          dma-names:
198            allOf:
199              - items:
200                  enum:
201                    - tx
202                    - rx
203        required:
204          - dmas
205          - dma-names
206    additionalProperties: false
207
208  rcar_sound,ssi:
209    description: SSI subnode.
210    type: object
211    patternProperties:
212      "^ssi-[0-9]$":
213        type: object
214        additionalProperties: false
215
216        properties:
217          interrupts:
218            maxItems: 1
219          dmas:
220            minItems: 2
221            maxItems: 4
222          dma-names:
223            allOf:
224              - items:
225                  enum:
226                    - tx
227                    - rx
228                    - txu # if no ssiu node
229                    - rxu # if no ssiu node
230
231          shared-pin:
232            description: shared clock pin
233            $ref: /schemas/types.yaml#/definitions/flag
234          pio-transfer:
235            description: PIO transfer mode
236            $ref: /schemas/types.yaml#/definitions/flag
237          no-busif:
238            description: BUSIF is not used when [mem -> SSI] via DMA case
239            $ref: /schemas/types.yaml#/definitions/flag
240        required:
241          - interrupts
242    additionalProperties: false
243
244patternProperties:
245  # For DAI base
246  'rcar_sound,dai(@[0-9a-f]+)?$':
247    description: DAI subnode.
248    type: object
249    patternProperties:
250      "^dai([0-9]+)?$":
251        type: object
252        additionalProperties: false
253
254        properties:
255          playback:
256            $ref: /schemas/types.yaml#/definitions/phandle-array
257          capture:
258            $ref: /schemas/types.yaml#/definitions/phandle-array
259        anyOf:
260          - required:
261              - playback
262          - required:
263              - capture
264    additionalProperties: false
265
266  'ports(@[0-9a-f]+)?$':
267    $ref: audio-graph-port.yaml#/definitions/port-base
268    unevaluatedProperties: false
269    patternProperties:
270      '^port(@[0-9a-f]+)?$':
271        $ref: "#/properties/port"
272
273required:
274  - compatible
275  - reg
276  - reg-names
277  - clocks
278  - clock-names
279
280allOf:
281  - $ref: dai-common.yaml#
282
283  # --------------------
284  # reg/reg-names
285  # --------------------
286  # for Gen1
287  - if:
288      properties:
289        compatible:
290          contains:
291            const: renesas,rcar_sound-gen1
292    then:
293      properties:
294        reg:
295          maxItems: 3
296        reg-names:
297          items:
298            enum:
299              - scu
300              - ssi
301              - adg
302  # for Gen2/Gen3
303  - if:
304      properties:
305        compatible:
306          contains:
307            enum:
308              - renesas,rcar_sound-gen2
309              - renesas,rcar_sound-gen3
310    then:
311      properties:
312        reg:
313          minItems: 5
314        reg-names:
315          items:
316            enum:
317              - scu
318              - adg
319              - ssiu
320              - ssi
321              - audmapp
322  # for Gen4
323  - if:
324      properties:
325        compatible:
326          contains:
327            const: renesas,rcar_sound-gen4
328    then:
329      properties:
330        reg:
331          maxItems: 4
332        reg-names:
333          items:
334            enum:
335              - adg
336              - ssiu
337              - ssi
338              - sdmc
339
340  # --------------------
341  # clock-names
342  # --------------------
343  - if:
344      properties:
345        compatible:
346          contains:
347            const: renesas,rcar_sound-gen4
348    then:
349      properties:
350        clock-names:
351          maxItems: 3
352          items:
353            enum:
354              - ssi.0
355              - ssiu.0
356              - clkin
357    else:
358      properties:
359        clock-names:
360          minItems: 1
361          maxItems: 31
362          items:
363            oneOf:
364              - const: ssi-all
365              - pattern: '^ssi\.[0-9]$'
366              - pattern: '^src\.[0-9]$'
367              - pattern: '^mix\.[0-1]$'
368              - pattern: '^ctu\.[0-1]$'
369              - pattern: '^dvc\.[0-1]$'
370              - pattern: '^clk_(a|b|c|i)$'
371
372unevaluatedProperties: false
373
374examples:
375  - |
376    #include <dt-bindings/clock/r8a7790-cpg-mssr.h>
377    #include <dt-bindings/interrupt-controller/arm-gic.h>
378    #include <dt-bindings/power/r8a7790-sysc.h>
379    rcar_sound: sound@ec500000 {
380        #sound-dai-cells = <1>;
381        compatible = "renesas,rcar_sound-r8a7790", "renesas,rcar_sound-gen2";
382        reg = <0xec500000 0x1000>, /* SCU  */
383              <0xec5a0000 0x100>,  /* ADG  */
384              <0xec540000 0x1000>, /* SSIU */
385              <0xec541000 0x280>,  /* SSI  */
386              <0xec740000 0x200>;  /* Audio DMAC peri peri*/
387        reg-names = "scu", "adg", "ssiu", "ssi", "audmapp";
388
389        clocks = <&cpg CPG_MOD 1005>,                      /* SSI-ALL    */
390                 <&cpg CPG_MOD 1006>, <&cpg CPG_MOD 1007>, /* SSI9, SSI8 */
391                 <&cpg CPG_MOD 1008>, <&cpg CPG_MOD 1009>, /* SSI7, SSI6 */
392                 <&cpg CPG_MOD 1010>, <&cpg CPG_MOD 1011>, /* SSI5, SSI4 */
393                 <&cpg CPG_MOD 1012>, <&cpg CPG_MOD 1013>, /* SSI3, SSI2 */
394                 <&cpg CPG_MOD 1014>, <&cpg CPG_MOD 1015>, /* SSI1, SSI0 */
395                 <&cpg CPG_MOD 1022>, <&cpg CPG_MOD 1023>, /* SRC9, SRC8 */
396                 <&cpg CPG_MOD 1024>, <&cpg CPG_MOD 1025>, /* SRC7, SRC6 */
397                 <&cpg CPG_MOD 1026>, <&cpg CPG_MOD 1027>, /* SRC5, SRC4 */
398                 <&cpg CPG_MOD 1028>, <&cpg CPG_MOD 1029>, /* SRC3, SRC2 */
399                 <&cpg CPG_MOD 1030>, <&cpg CPG_MOD 1031>, /* SRC1, SRC0 */
400                 <&cpg CPG_MOD 1020>, <&cpg CPG_MOD 1021>, /* MIX1, MIX0 */
401                 <&cpg CPG_MOD 1020>, <&cpg CPG_MOD 1021>, /* CTU1, CTU0 */
402                 <&cpg CPG_MOD 1019>, <&cpg CPG_MOD 1018>, /* DVC0, DVC1 */
403                 <&audio_clk_a>, <&audio_clk_b>,           /* CLKA, CLKB */
404                 <&audio_clk_c>, <&audio_clk_i>;           /* CLKC, CLKI */
405
406        clock-names = "ssi-all",
407                      "ssi.9", "ssi.8",
408                      "ssi.7", "ssi.6",
409                      "ssi.5", "ssi.4",
410                      "ssi.3", "ssi.2",
411                      "ssi.1", "ssi.0",
412                      "src.9", "src.8",
413                      "src.7", "src.6",
414                      "src.5", "src.4",
415                      "src.3", "src.2",
416                      "src.1", "src.0",
417                      "mix.1", "mix.0",
418                      "ctu.1", "ctu.0",
419                      "dvc.0", "dvc.1",
420                      "clk_a", "clk_b",
421                      "clk_c", "clk_i";
422
423        power-domains = <&sysc R8A7790_PD_ALWAYS_ON>;
424
425        resets = <&cpg 1005>,
426                 <&cpg 1006>, <&cpg 1007>, <&cpg 1008>, <&cpg 1009>,
427                 <&cpg 1010>, <&cpg 1011>, <&cpg 1012>, <&cpg 1013>,
428                 <&cpg 1014>, <&cpg 1015>;
429        reset-names = "ssi-all",
430                      "ssi.9", "ssi.8", "ssi.7", "ssi.6",
431                      "ssi.5", "ssi.4", "ssi.3", "ssi.2",
432                      "ssi.1", "ssi.0";
433
434        rcar_sound,dvc {
435               dvc0: dvc-0 {
436                    dmas = <&audma0 0xbc>;
437                    dma-names = "tx";
438               };
439               dvc1: dvc-1 {
440                    dmas = <&audma0 0xbe>;
441                    dma-names = "tx";
442               };
443        };
444
445        rcar_sound,mix {
446            mix0: mix-0 { };
447            mix1: mix-1 { };
448        };
449
450        rcar_sound,ctu {
451            ctu00: ctu-0 { };
452            ctu01: ctu-1 { };
453            ctu02: ctu-2 { };
454            ctu03: ctu-3 { };
455            ctu10: ctu-4 { };
456            ctu11: ctu-5 { };
457            ctu12: ctu-6 { };
458            ctu13: ctu-7 { };
459        };
460
461        rcar_sound,src {
462            src0: src-0 {
463                status = "disabled";
464            };
465            src1: src-1 {
466                interrupts = <GIC_SPI 353 IRQ_TYPE_LEVEL_HIGH>;
467                dmas = <&audma0 0x87>, <&audma1 0x9c>;
468                dma-names = "rx", "tx";
469            };
470            /* skip after src-2 */
471        };
472
473        rcar_sound,ssiu {
474            ssiu00: ssiu-0 {
475                dmas = <&audma0 0x15>, <&audma1 0x16>;
476                dma-names = "rx", "tx";
477            };
478            ssiu01: ssiu-1 {
479                dmas = <&audma0 0x35>, <&audma1 0x36>;
480                dma-names = "rx", "tx";
481            };
482            /* skip after ssiu-2 */
483        };
484
485        rcar_sound,ssi {
486            ssi0: ssi-0 {
487                interrupts = <GIC_SPI 370 IRQ_TYPE_LEVEL_HIGH>;
488                dmas = <&audma0 0x01>, <&audma1 0x02>;
489                dma-names = "rx", "tx";
490            };
491            ssi1: ssi-1 {
492                interrupts = <GIC_SPI 371 IRQ_TYPE_LEVEL_HIGH>;
493                dmas = <&audma0 0x03>, <&audma1 0x04>;
494                dma-names = "rx", "tx";
495            };
496            /* skip other ssi-2 */
497        };
498
499        /* DAI base */
500        rcar_sound,dai {
501            dai0 {
502                playback = <&ssi5>, <&src5>;
503                capture = <&ssi6>;
504            };
505            dai1 {
506                playback = <&ssi3>;
507            };
508            dai2 {
509                capture = <&ssi4>;
510            };
511            dai3 {
512                playback = <&ssi7>;
513            };
514            dai4 {
515                capture = <&ssi8>;
516            };
517        };
518
519        /* assume audio-graph */
520        port {
521            rsnd_endpoint: endpoint {
522                remote-endpoint = <&codec_endpoint>;
523
524                dai-format = "left_j";
525                bitclock-master = <&rsnd_endpoint0>;
526                frame-master = <&rsnd_endpoint0>;
527
528                playback = <&ssi0>, <&src0>, <&dvc0>;
529                capture = <&ssi1>, <&src1>, <&dvc1>;
530            };
531        };
532    };
533
534    /* assume audio-graph */
535    codec {
536        port {
537            codec_endpoint: endpoint {
538                remote-endpoint = <&rsnd_endpoint>;
539            };
540        };
541    };
542