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 }; 541