xref: /linux/Documentation/devicetree/bindings/sound/renesas,rsnd.yaml (revision a0efa2f362a69e47b9d8b48f770ef3a0249a7911)
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  post-init-providers:
116    description: At least if rsnd is using DPCM connection on Audio-Graph-Card2,
117      fw_devlink might doesn't have enough information to break the cycle. rsnd
118      driver will not be probed in such case. Same problem might occur with
119      Multi-CPU/Codec or Codec2Codec.
120
121  # ports is below
122  port:
123    $ref: audio-graph-port.yaml#/definitions/port-base
124    unevaluatedProperties: false
125    patternProperties:
126      "^endpoint(@[0-9a-f]+)?":
127        $ref: audio-graph-port.yaml#/definitions/endpoint-base
128        properties:
129          playback:
130            $ref: /schemas/types.yaml#/definitions/phandle-array
131          capture:
132            $ref: /schemas/types.yaml#/definitions/phandle-array
133        unevaluatedProperties: false
134
135  rcar_sound,dvc:
136    description: DVC subnode.
137    type: object
138    patternProperties:
139      "^dvc-[0-1]$":
140        type: object
141        additionalProperties: false
142
143        properties:
144          dmas:
145            maxItems: 1
146          dma-names:
147            const: tx
148        required:
149          - dmas
150          - dma-names
151    additionalProperties: false
152
153  rcar_sound,mix:
154    description: MIX subnode.
155    type: object
156    patternProperties:
157      "^mix-[0-1]$":
158        type: object
159        additionalProperties: false
160    additionalProperties: false
161
162  rcar_sound,ctu:
163    description: CTU subnode.
164    type: object
165    patternProperties:
166      "^ctu-[0-7]$":
167        type: object
168        additionalProperties: false
169    additionalProperties: false
170
171  rcar_sound,src:
172    description: SRC subnode.
173    type: object
174    patternProperties:
175      "^src-[0-9]$":
176        type: object
177        additionalProperties: false
178
179        properties:
180          interrupts:
181            maxItems: 1
182          dmas:
183            maxItems: 2
184          dma-names:
185            allOf:
186              - items:
187                  enum:
188                    - tx
189                    - rx
190    additionalProperties: false
191
192  rcar_sound,ssiu:
193    description: SSIU subnode.
194    type: object
195    patternProperties:
196      "^ssiu-[0-9]+$":
197        type: object
198        additionalProperties: false
199
200        properties:
201          dmas:
202            maxItems: 2
203          dma-names:
204            allOf:
205              - items:
206                  enum:
207                    - tx
208                    - rx
209        required:
210          - dmas
211          - dma-names
212    additionalProperties: false
213
214  rcar_sound,ssi:
215    description: SSI subnode.
216    type: object
217    patternProperties:
218      "^ssi-[0-9]$":
219        type: object
220        additionalProperties: false
221
222        properties:
223          interrupts:
224            maxItems: 1
225          dmas:
226            minItems: 2
227            maxItems: 4
228          dma-names:
229            allOf:
230              - items:
231                  enum:
232                    - tx
233                    - rx
234                    - txu # if no ssiu node
235                    - rxu # if no ssiu node
236
237          shared-pin:
238            description: shared clock pin
239            $ref: /schemas/types.yaml#/definitions/flag
240          pio-transfer:
241            description: PIO transfer mode
242            $ref: /schemas/types.yaml#/definitions/flag
243          no-busif:
244            description: BUSIF is not used when [mem -> SSI] via DMA case
245            $ref: /schemas/types.yaml#/definitions/flag
246        required:
247          - interrupts
248    additionalProperties: false
249
250patternProperties:
251  # For DAI base
252  'rcar_sound,dai(@[0-9a-f]+)?$':
253    description: DAI subnode.
254    type: object
255    patternProperties:
256      "^dai([0-9]+)?$":
257        type: object
258        additionalProperties: false
259
260        properties:
261          playback:
262            $ref: /schemas/types.yaml#/definitions/phandle-array
263          capture:
264            $ref: /schemas/types.yaml#/definitions/phandle-array
265        anyOf:
266          - required:
267              - playback
268          - required:
269              - capture
270    additionalProperties: false
271
272  'ports(@[0-9a-f]+)?$':
273    $ref: audio-graph-port.yaml#/definitions/port-base
274    unevaluatedProperties: false
275    patternProperties:
276      '^port(@[0-9a-f]+)?$':
277        $ref: "#/properties/port"
278
279required:
280  - compatible
281  - reg
282  - reg-names
283  - clocks
284  - clock-names
285
286allOf:
287  - $ref: dai-common.yaml#
288
289  # --------------------
290  # reg/reg-names
291  # --------------------
292  # for Gen1
293  - if:
294      properties:
295        compatible:
296          contains:
297            const: renesas,rcar_sound-gen1
298    then:
299      properties:
300        reg:
301          maxItems: 3
302        reg-names:
303          items:
304            enum:
305              - scu
306              - ssi
307              - adg
308  # for Gen2/Gen3
309  - if:
310      properties:
311        compatible:
312          contains:
313            enum:
314              - renesas,rcar_sound-gen2
315              - renesas,rcar_sound-gen3
316    then:
317      properties:
318        reg:
319          minItems: 5
320        reg-names:
321          items:
322            enum:
323              - scu
324              - adg
325              - ssiu
326              - ssi
327              - audmapp
328  # for Gen4
329  - if:
330      properties:
331        compatible:
332          contains:
333            const: renesas,rcar_sound-gen4
334    then:
335      properties:
336        reg:
337          maxItems: 4
338        reg-names:
339          items:
340            enum:
341              - adg
342              - ssiu
343              - ssi
344              - sdmc
345
346  # --------------------
347  # clock-names
348  # --------------------
349  - if:
350      properties:
351        compatible:
352          contains:
353            const: renesas,rcar_sound-gen4
354    then:
355      properties:
356        clock-names:
357          maxItems: 3
358          items:
359            enum:
360              - ssi.0
361              - ssiu.0
362              - clkin
363    else:
364      properties:
365        clock-names:
366          minItems: 1
367          maxItems: 31
368          items:
369            oneOf:
370              - const: ssi-all
371              - pattern: '^ssi\.[0-9]$'
372              - pattern: '^src\.[0-9]$'
373              - pattern: '^mix\.[0-1]$'
374              - pattern: '^ctu\.[0-1]$'
375              - pattern: '^dvc\.[0-1]$'
376              - pattern: '^clk_(a|b|c|i)$'
377
378unevaluatedProperties: false
379
380examples:
381  - |
382    #include <dt-bindings/clock/r8a7790-cpg-mssr.h>
383    #include <dt-bindings/interrupt-controller/arm-gic.h>
384    #include <dt-bindings/power/r8a7790-sysc.h>
385    rcar_sound: sound@ec500000 {
386        #sound-dai-cells = <1>;
387        compatible = "renesas,rcar_sound-r8a7790", "renesas,rcar_sound-gen2";
388        reg = <0xec500000 0x1000>, /* SCU  */
389              <0xec5a0000 0x100>,  /* ADG  */
390              <0xec540000 0x1000>, /* SSIU */
391              <0xec541000 0x280>,  /* SSI  */
392              <0xec740000 0x200>;  /* Audio DMAC peri peri*/
393        reg-names = "scu", "adg", "ssiu", "ssi", "audmapp";
394
395        clocks = <&cpg CPG_MOD 1005>,                      /* SSI-ALL    */
396                 <&cpg CPG_MOD 1006>, <&cpg CPG_MOD 1007>, /* SSI9, SSI8 */
397                 <&cpg CPG_MOD 1008>, <&cpg CPG_MOD 1009>, /* SSI7, SSI6 */
398                 <&cpg CPG_MOD 1010>, <&cpg CPG_MOD 1011>, /* SSI5, SSI4 */
399                 <&cpg CPG_MOD 1012>, <&cpg CPG_MOD 1013>, /* SSI3, SSI2 */
400                 <&cpg CPG_MOD 1014>, <&cpg CPG_MOD 1015>, /* SSI1, SSI0 */
401                 <&cpg CPG_MOD 1022>, <&cpg CPG_MOD 1023>, /* SRC9, SRC8 */
402                 <&cpg CPG_MOD 1024>, <&cpg CPG_MOD 1025>, /* SRC7, SRC6 */
403                 <&cpg CPG_MOD 1026>, <&cpg CPG_MOD 1027>, /* SRC5, SRC4 */
404                 <&cpg CPG_MOD 1028>, <&cpg CPG_MOD 1029>, /* SRC3, SRC2 */
405                 <&cpg CPG_MOD 1030>, <&cpg CPG_MOD 1031>, /* SRC1, SRC0 */
406                 <&cpg CPG_MOD 1020>, <&cpg CPG_MOD 1021>, /* MIX1, MIX0 */
407                 <&cpg CPG_MOD 1020>, <&cpg CPG_MOD 1021>, /* CTU1, CTU0 */
408                 <&cpg CPG_MOD 1019>, <&cpg CPG_MOD 1018>, /* DVC0, DVC1 */
409                 <&audio_clk_a>, <&audio_clk_b>,           /* CLKA, CLKB */
410                 <&audio_clk_c>, <&audio_clk_i>;           /* CLKC, CLKI */
411
412        clock-names = "ssi-all",
413                      "ssi.9", "ssi.8",
414                      "ssi.7", "ssi.6",
415                      "ssi.5", "ssi.4",
416                      "ssi.3", "ssi.2",
417                      "ssi.1", "ssi.0",
418                      "src.9", "src.8",
419                      "src.7", "src.6",
420                      "src.5", "src.4",
421                      "src.3", "src.2",
422                      "src.1", "src.0",
423                      "mix.1", "mix.0",
424                      "ctu.1", "ctu.0",
425                      "dvc.0", "dvc.1",
426                      "clk_a", "clk_b",
427                      "clk_c", "clk_i";
428
429        power-domains = <&sysc R8A7790_PD_ALWAYS_ON>;
430
431        resets = <&cpg 1005>,
432                 <&cpg 1006>, <&cpg 1007>, <&cpg 1008>, <&cpg 1009>,
433                 <&cpg 1010>, <&cpg 1011>, <&cpg 1012>, <&cpg 1013>,
434                 <&cpg 1014>, <&cpg 1015>;
435        reset-names = "ssi-all",
436                      "ssi.9", "ssi.8", "ssi.7", "ssi.6",
437                      "ssi.5", "ssi.4", "ssi.3", "ssi.2",
438                      "ssi.1", "ssi.0";
439
440        rcar_sound,dvc {
441               dvc0: dvc-0 {
442                    dmas = <&audma0 0xbc>;
443                    dma-names = "tx";
444               };
445               dvc1: dvc-1 {
446                    dmas = <&audma0 0xbe>;
447                    dma-names = "tx";
448               };
449        };
450
451        rcar_sound,mix {
452            mix0: mix-0 { };
453            mix1: mix-1 { };
454        };
455
456        rcar_sound,ctu {
457            ctu00: ctu-0 { };
458            ctu01: ctu-1 { };
459            ctu02: ctu-2 { };
460            ctu03: ctu-3 { };
461            ctu10: ctu-4 { };
462            ctu11: ctu-5 { };
463            ctu12: ctu-6 { };
464            ctu13: ctu-7 { };
465        };
466
467        rcar_sound,src {
468            src0: src-0 {
469                status = "disabled";
470            };
471            src1: src-1 {
472                interrupts = <GIC_SPI 353 IRQ_TYPE_LEVEL_HIGH>;
473                dmas = <&audma0 0x87>, <&audma1 0x9c>;
474                dma-names = "rx", "tx";
475            };
476            /* skip after src-2 */
477        };
478
479        rcar_sound,ssiu {
480            ssiu00: ssiu-0 {
481                dmas = <&audma0 0x15>, <&audma1 0x16>;
482                dma-names = "rx", "tx";
483            };
484            ssiu01: ssiu-1 {
485                dmas = <&audma0 0x35>, <&audma1 0x36>;
486                dma-names = "rx", "tx";
487            };
488            /* skip after ssiu-2 */
489        };
490
491        rcar_sound,ssi {
492            ssi0: ssi-0 {
493                interrupts = <GIC_SPI 370 IRQ_TYPE_LEVEL_HIGH>;
494                dmas = <&audma0 0x01>, <&audma1 0x02>;
495                dma-names = "rx", "tx";
496            };
497            ssi1: ssi-1 {
498                interrupts = <GIC_SPI 371 IRQ_TYPE_LEVEL_HIGH>;
499                dmas = <&audma0 0x03>, <&audma1 0x04>;
500                dma-names = "rx", "tx";
501            };
502            /* skip other ssi-2 */
503        };
504
505        /* DAI base */
506        rcar_sound,dai {
507            dai0 {
508                playback = <&ssi5>, <&src5>;
509                capture = <&ssi6>;
510            };
511            dai1 {
512                playback = <&ssi3>;
513            };
514            dai2 {
515                capture = <&ssi4>;
516            };
517            dai3 {
518                playback = <&ssi7>;
519            };
520            dai4 {
521                capture = <&ssi8>;
522            };
523        };
524
525        /* assume audio-graph */
526        port {
527            rsnd_endpoint: endpoint {
528                remote-endpoint = <&codec_endpoint>;
529
530                dai-format = "left_j";
531                bitclock-master = <&rsnd_endpoint0>;
532                frame-master = <&rsnd_endpoint0>;
533
534                playback = <&ssi0>, <&src0>, <&dvc0>;
535                capture = <&ssi1>, <&src1>, <&dvc1>;
536            };
537        };
538    };
539
540    /* assume audio-graph */
541    codec {
542        port {
543            codec_endpoint: endpoint {
544                remote-endpoint = <&rsnd_endpoint>;
545            };
546        };
547    };
548