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