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          - const: renesas,rcar_sound-r8a779g0  # R-Car V4H
52          - const: renesas,rcar_sound-gen4
53      # for Generic
54      - enum:
55          - renesas,rcar_sound-gen1
56          - renesas,rcar_sound-gen2
57          - renesas,rcar_sound-gen3
58
59  reg:
60    minItems: 1
61    maxItems: 5
62
63  reg-names:
64    minItems: 1
65    maxItems: 5
66
67  "#sound-dai-cells":
68    description: |
69      it must be 0 if your system is using single DAI
70      it must be 1 if your system is using multi  DAIs
71      This is used on simple-audio-card
72    enum: [0, 1]
73
74  "#clock-cells":
75    description: |
76      it must be 0 if your system has audio_clkout
77      it must be 1 if your system has audio_clkout0/1/2/3
78    enum: [0, 1]
79
80  clock-frequency:
81    description: for audio_clkout0/1/2/3
82
83  clkout-lr-asynchronous:
84    description: audio_clkoutn is asynchronizes with lr-clock.
85    $ref: /schemas/types.yaml#/definitions/flag
86
87  power-domains: true
88
89  resets:
90    minItems: 1
91    maxItems: 11
92
93  reset-names:
94    minItems: 1
95    maxItems: 11
96
97  clocks:
98    description: References to SSI/SRC/MIX/CTU/DVC/AUDIO_CLK clocks.
99    minItems: 1
100    maxItems: 31
101
102  clock-names:
103    description: List of necessary clock names.
104    minItems: 1
105    maxItems: 31
106    items:
107      oneOf:
108        - const: ssi-all
109        - pattern: '^ssi\.[0-9]$'
110        - pattern: '^src\.[0-9]$'
111        - pattern: '^mix\.[0-1]$'
112        - pattern: '^ctu\.[0-1]$'
113        - pattern: '^dvc\.[0-1]$'
114        - pattern: '^clk_(a|b|c|i)$'
115
116  ports:
117    $ref: audio-graph-port.yaml#/definitions/port-base
118    unevaluatedProperties: false
119    patternProperties:
120      '^port(@[0-9a-f]+)?$':
121        $ref: audio-graph-port.yaml#/definitions/port-base
122        unevaluatedProperties: false
123        patternProperties:
124          "^endpoint(@[0-9a-f]+)?":
125            $ref: audio-graph-port.yaml#/definitions/endpoint-base
126            properties:
127              playback:
128                $ref: /schemas/types.yaml#/definitions/phandle-array
129              capture:
130                $ref: /schemas/types.yaml#/definitions/phandle-array
131            unevaluatedProperties: false
132
133  port:
134    $ref: audio-graph-port.yaml#/definitions/port-base
135    unevaluatedProperties: false
136    patternProperties:
137      "^endpoint(@[0-9a-f]+)?":
138        $ref: audio-graph-port.yaml#/definitions/endpoint-base
139        properties:
140          playback:
141            $ref: /schemas/types.yaml#/definitions/phandle-array
142          capture:
143            $ref: /schemas/types.yaml#/definitions/phandle-array
144        unevaluatedProperties: false
145
146  rcar_sound,dvc:
147    description: DVC subnode.
148    type: object
149    patternProperties:
150      "^dvc-[0-1]$":
151        type: object
152        additionalProperties: false
153
154        properties:
155          dmas:
156            maxItems: 1
157          dma-names:
158            const: "tx"
159        required:
160          - dmas
161          - dma-names
162    additionalProperties: false
163
164  rcar_sound,mix:
165    description: MIX subnode.
166    type: object
167    patternProperties:
168      "^mix-[0-1]$":
169        type: object
170        additionalProperties: false
171    additionalProperties: false
172
173  rcar_sound,ctu:
174    description: CTU subnode.
175    type: object
176    patternProperties:
177      "^ctu-[0-7]$":
178        type: object
179        additionalProperties: false
180    additionalProperties: false
181
182  rcar_sound,src:
183    description: SRC subnode.
184    type: object
185    patternProperties:
186      "^src-[0-9]$":
187        type: object
188        additionalProperties: false
189
190        properties:
191          interrupts:
192            maxItems: 1
193          dmas:
194            maxItems: 2
195          dma-names:
196            allOf:
197              - items:
198                  enum:
199                    - tx
200                    - rx
201    additionalProperties: false
202
203  rcar_sound,ssiu:
204    description: SSIU subnode.
205    type: object
206    patternProperties:
207      "^ssiu-[0-9]+$":
208        type: object
209        additionalProperties: false
210
211        properties:
212          dmas:
213            maxItems: 2
214          dma-names:
215            allOf:
216              - items:
217                  enum:
218                    - tx
219                    - rx
220        required:
221          - dmas
222          - dma-names
223    additionalProperties: false
224
225  rcar_sound,ssi:
226    description: SSI subnode.
227    type: object
228    patternProperties:
229      "^ssi-[0-9]$":
230        type: object
231        additionalProperties: false
232
233        properties:
234          interrupts:
235            maxItems: 1
236          dmas:
237            minItems: 2
238            maxItems: 4
239          dma-names:
240            allOf:
241              - items:
242                  enum:
243                    - tx
244                    - rx
245                    - txu # if no ssiu node
246                    - rxu # if no ssiu node
247
248          shared-pin:
249            description: shared clock pin
250            $ref: /schemas/types.yaml#/definitions/flag
251          pio-transfer:
252            description: PIO transfer mode
253            $ref: /schemas/types.yaml#/definitions/flag
254          no-busif:
255            description: BUSIF is not used when [mem -> SSI] via DMA case
256            $ref: /schemas/types.yaml#/definitions/flag
257        required:
258          - interrupts
259          - dmas
260          - dma-names
261    additionalProperties: false
262
263  # For DAI base
264  rcar_sound,dai:
265    description: DAI subnode.
266    type: object
267    patternProperties:
268      "^dai([0-9]+)?$":
269        type: object
270        additionalProperties: false
271
272        properties:
273          playback:
274            $ref: /schemas/types.yaml#/definitions/phandle-array
275          capture:
276            $ref: /schemas/types.yaml#/definitions/phandle-array
277        anyOf:
278          - required:
279              - playback
280          - required:
281              - capture
282    additionalProperties: false
283
284required:
285  - compatible
286  - reg
287  - reg-names
288  - clocks
289  - clock-names
290
291allOf:
292  - $ref: dai-common.yaml#
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          maxItems: 3
304          items:
305            enum:
306              - scu
307              - ssi
308              - adg
309    else:
310      properties:
311        reg:
312          maxItems: 5
313        reg-names:
314          maxItems: 5
315          items:
316            enum:
317              - scu
318              - adg
319              - ssiu
320              - ssi
321              - audmapp
322
323unevaluatedProperties: false
324
325examples:
326  - |
327    rcar_sound: sound@ec500000 {
328        #sound-dai-cells = <1>;
329        compatible = "renesas,rcar_sound-r8a7790", "renesas,rcar_sound-gen2";
330        reg = <0xec500000 0x1000>, /* SCU  */
331              <0xec5a0000 0x100>,  /* ADG  */
332              <0xec540000 0x1000>, /* SSIU */
333              <0xec541000 0x1280>, /* SSI  */
334              <0xec740000 0x200>;  /* Audio DMAC peri peri*/
335        reg-names = "scu", "adg", "ssiu", "ssi", "audmapp";
336
337        clocks = <&mstp10_clks 1005>,                      /* SSI-ALL    */
338                 <&mstp10_clks 1006>, <&mstp10_clks 1007>, /* SSI9, SSI8 */
339                 <&mstp10_clks 1008>, <&mstp10_clks 1009>, /* SSI7, SSI6 */
340                 <&mstp10_clks 1010>, <&mstp10_clks 1011>, /* SSI5, SSI4 */
341                 <&mstp10_clks 1012>, <&mstp10_clks 1013>, /* SSI3, SSI2 */
342                 <&mstp10_clks 1014>, <&mstp10_clks 1015>, /* SSI1, SSI0 */
343                 <&mstp10_clks 1022>, <&mstp10_clks 1023>, /* SRC9, SRC8 */
344                 <&mstp10_clks 1024>, <&mstp10_clks 1025>, /* SRC7, SRC6 */
345                 <&mstp10_clks 1026>, <&mstp10_clks 1027>, /* SRC5, SRC4 */
346                 <&mstp10_clks 1028>, <&mstp10_clks 1029>, /* SRC3, SRC2 */
347                 <&mstp10_clks 1030>, <&mstp10_clks 1031>, /* SRC1, SRC0 */
348                 <&mstp10_clks 1020>, <&mstp10_clks 1021>, /* MIX1, MIX0 */
349                 <&mstp10_clks 1020>, <&mstp10_clks 1021>, /* CTU1, CTU0 */
350                 <&mstp10_clks 1019>, <&mstp10_clks 1018>, /* DVC0, DVC1 */
351                 <&audio_clk_a>, <&audio_clk_b>,           /* CLKA, CLKB */
352                 <&audio_clk_c>, <&audio_clk_i>;           /* CLKC, CLKI */
353
354        clock-names = "ssi-all",
355                      "ssi.9", "ssi.8",
356                      "ssi.7", "ssi.6",
357                      "ssi.5", "ssi.4",
358                      "ssi.3", "ssi.2",
359                      "ssi.1", "ssi.0",
360                      "src.9", "src.8",
361                      "src.7", "src.6",
362                      "src.5", "src.4",
363                      "src.3", "src.2",
364                      "src.1", "src.0",
365                      "mix.1", "mix.0",
366                      "ctu.1", "ctu.0",
367                      "dvc.0", "dvc.1",
368                      "clk_a", "clk_b",
369                      "clk_c", "clk_i";
370
371        rcar_sound,dvc {
372               dvc0: dvc-0 {
373                    dmas = <&audma0 0xbc>;
374                    dma-names = "tx";
375               };
376               dvc1: dvc-1 {
377                    dmas = <&audma0 0xbe>;
378                    dma-names = "tx";
379               };
380        };
381
382        rcar_sound,mix {
383            mix0: mix-0 { };
384            mix1: mix-1 { };
385        };
386
387        rcar_sound,ctu {
388            ctu00: ctu-0 { };
389            ctu01: ctu-1 { };
390            ctu02: ctu-2 { };
391            ctu03: ctu-3 { };
392            ctu10: ctu-4 { };
393            ctu11: ctu-5 { };
394            ctu12: ctu-6 { };
395            ctu13: ctu-7 { };
396        };
397
398        rcar_sound,src {
399            src0: src-0 {
400                status = "disabled";
401            };
402            src1: src-1 {
403                interrupts = <0 353 0>;
404                dmas = <&audma0 0x87>, <&audma1 0x9c>;
405                dma-names = "rx", "tx";
406            };
407            /* skip after src-2 */
408        };
409
410        rcar_sound,ssiu {
411            ssiu00: ssiu-0 {
412                dmas = <&audma0 0x15>, <&audma1 0x16>;
413                dma-names = "rx", "tx";
414            };
415            ssiu01: ssiu-1 {
416                dmas = <&audma0 0x35>, <&audma1 0x36>;
417                dma-names = "rx", "tx";
418            };
419            /* skip after ssiu-2 */
420        };
421
422        rcar_sound,ssi {
423            ssi0: ssi-0 {
424                interrupts = <0 370 1>;
425                dmas = <&audma0 0x01>, <&audma1 0x02>;
426                dma-names = "rx", "tx";
427            };
428            ssi1: ssi-1 {
429                interrupts = <0 371 1>;
430                dmas = <&audma0 0x03>, <&audma1 0x04>;
431                dma-names = "rx", "tx";
432            };
433            /* skip other ssi-2 */
434        };
435
436        /* DAI base */
437        rcar_sound,dai {
438            dai0 {
439                playback = <&ssi5>, <&src5>;
440                capture  = <&ssi6>;
441            };
442            dai1 {
443                playback = <&ssi3>;
444            };
445            dai2 {
446                capture  = <&ssi4>;
447            };
448            dai3 {
449                playback = <&ssi7>;
450            };
451            dai4 {
452                capture  = <&ssi8>;
453            };
454        };
455
456        /* assume audio-graph */
457        port {
458            rsnd_endpoint: endpoint {
459                remote-endpoint = <&codec_endpoint>;
460
461                dai-format = "left_j";
462                bitclock-master = <&rsnd_endpoint0>;
463                frame-master = <&rsnd_endpoint0>;
464
465                playback = <&ssi0>, <&src0>, <&dvc0>;
466                capture  = <&ssi1>, <&src1>, <&dvc1>;
467            };
468        };
469    };
470
471
472    /* assume audio-graph */
473    codec {
474        port {
475            codec_endpoint: endpoint {
476                remote-endpoint = <&rsnd_endpoint>;
477            };
478        };
479    };
480