blob: 07ec6247d9defc4176fa638df8d96bbf5bd46a06 [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:
Tom Rini762f85b2024-07-20 11:15:10 -060051 - enum:
52 - renesas,rcar_sound-r8a779g0 # R-Car V4H
53 - renesas,rcar_sound-r8a779h0 # R-Car V4M
Tom Rini53633a82024-02-29 12:33:36 -050054 - 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
Tom Rini762f85b2024-07-20 11:15:10 -060060 - renesas,rcar_sound-gen4
Tom Rini53633a82024-02-29 12:33:36 -050061
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:
Tom Rini93743d22024-04-01 09:08:13 -0400117 $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
Tom Rini53633a82024-02-29 12:33:36 -0500128
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]+)?$':
Tom Rini93743d22024-04-01 09:08:13 -0400271 $ref: "#/properties/port"
Tom Rini53633a82024-02-29 12:33:36 -0500272
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>;
Tom Rini93743d22024-04-01 09:08:13 -0400503 capture = <&ssi6>;
Tom Rini53633a82024-02-29 12:33:36 -0500504 };
505 dai1 {
506 playback = <&ssi3>;
507 };
508 dai2 {
Tom Rini93743d22024-04-01 09:08:13 -0400509 capture = <&ssi4>;
Tom Rini53633a82024-02-29 12:33:36 -0500510 };
511 dai3 {
512 playback = <&ssi7>;
513 };
514 dai4 {
Tom Rini93743d22024-04-01 09:08:13 -0400515 capture = <&ssi8>;
Tom Rini53633a82024-02-29 12:33:36 -0500516 };
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>;
Tom Rini93743d22024-04-01 09:08:13 -0400529 capture = <&ssi1>, <&src1>, <&dvc1>;
Tom Rini53633a82024-02-29 12:33:36 -0500530 };
531 };
532 };
533
534 /* assume audio-graph */
535 codec {
536 port {
537 codec_endpoint: endpoint {
538 remote-endpoint = <&rsnd_endpoint>;
539 };
540 };
541 };