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