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