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