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 "#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: 114 $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 125 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]+)?$': 268 $ref: "#/properties/port" 269 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>; 500 capture = <&ssi6>; 501 }; 502 dai1 { 503 playback = <&ssi3>; 504 }; 505 dai2 { 506 capture = <&ssi4>; 507 }; 508 dai3 { 509 playback = <&ssi7>; 510 }; 511 dai4 { 512 capture = <&ssi8>; 513 }; 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>; 526 capture = <&ssi1>, <&src1>, <&dvc1>; 527 }; 528 }; 529 }; 530 531 /* assume audio-graph */ 532 codec { 533 port { 534 codec_endpoint: endpoint { 535 remote-endpoint = <&rsnd_endpoint>; 536 }; 537 }; 538 }; 539