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 Generic 50 - enum: 51 - renesas,rcar_sound-gen1 52 - renesas,rcar_sound-gen2 53 - renesas,rcar_sound-gen3 54 55 reg: 56 minItems: 1 57 maxItems: 5 58 59 reg-names: 60 minItems: 1 61 maxItems: 5 62 63 "#sound-dai-cells": 64 description: | 65 it must be 0 if your system is using single DAI 66 it must be 1 if your system is using multi DAIs 67 enum: [0, 1] 68 69 "#clock-cells": 70 description: | 71 it must be 0 if your system has audio_clkout 72 it must be 1 if your system has audio_clkout0/1/2/3 73 enum: [0, 1] 74 75 clock-frequency: 76 description: for audio_clkout0/1/2/3 77 78 clkout-lr-asynchronous: 79 description: audio_clkoutn is asynchronizes with lr-clock. 80 $ref: /schemas/types.yaml#/definitions/flag 81 82 power-domains: true 83 84 resets: 85 minItems: 1 86 maxItems: 11 87 88 reset-names: 89 minItems: 1 90 maxItems: 11 91 92 clocks: 93 description: References to SSI/SRC/MIX/CTU/DVC/AUDIO_CLK clocks. 94 minItems: 1 95 maxItems: 31 96 97 clock-names: 98 description: List of necessary clock names. 99 minItems: 1 100 maxItems: 31 101 items: 102 oneOf: 103 - const: ssi-all 104 - pattern: '^ssi\.[0-9]$' 105 - pattern: '^src\.[0-9]$' 106 - pattern: '^mix\.[0-1]$' 107 - pattern: '^ctu\.[0-1]$' 108 - pattern: '^dvc\.[0-1]$' 109 - pattern: '^clk_(a|b|c|i)$' 110 111 ports: 112 $ref: audio-graph-port.yaml#/definitions/port-base 113 unevaluatedProperties: false 114 patternProperties: 115 '^port(@[0-9a-f]+)?$': 116 $ref: audio-graph-port.yaml#/definitions/port-base 117 unevaluatedProperties: false 118 patternProperties: 119 "^endpoint(@[0-9a-f]+)?": 120 $ref: audio-graph-port.yaml#/definitions/endpoint-base 121 properties: 122 playback: 123 $ref: /schemas/types.yaml#/definitions/phandle-array 124 capture: 125 $ref: /schemas/types.yaml#/definitions/phandle-array 126 unevaluatedProperties: false 127 128 port: 129 $ref: audio-graph-port.yaml#/definitions/port-base 130 unevaluatedProperties: false 131 patternProperties: 132 "^endpoint(@[0-9a-f]+)?": 133 $ref: audio-graph-port.yaml#/definitions/endpoint-base 134 properties: 135 playback: 136 $ref: /schemas/types.yaml#/definitions/phandle-array 137 capture: 138 $ref: /schemas/types.yaml#/definitions/phandle-array 139 unevaluatedProperties: false 140 141 rcar_sound,dvc: 142 description: DVC subnode. 143 type: object 144 patternProperties: 145 "^dvc-[0-1]$": 146 type: object 147 additionalProperties: false 148 149 properties: 150 dmas: 151 maxItems: 1 152 dma-names: 153 const: "tx" 154 required: 155 - dmas 156 - dma-names 157 additionalProperties: false 158 159 rcar_sound,mix: 160 description: MIX subnode. 161 type: object 162 patternProperties: 163 "^mix-[0-1]$": 164 type: object 165 additionalProperties: false 166 additionalProperties: false 167 168 rcar_sound,ctu: 169 description: CTU subnode. 170 type: object 171 patternProperties: 172 "^ctu-[0-7]$": 173 type: object 174 additionalProperties: false 175 additionalProperties: false 176 177 rcar_sound,src: 178 description: SRC subnode. 179 type: object 180 patternProperties: 181 "^src-[0-9]$": 182 type: object 183 additionalProperties: false 184 185 properties: 186 interrupts: 187 maxItems: 1 188 dmas: 189 maxItems: 2 190 dma-names: 191 allOf: 192 - items: 193 enum: 194 - tx 195 - rx 196 additionalProperties: false 197 198 rcar_sound,ssiu: 199 description: SSIU subnode. 200 type: object 201 patternProperties: 202 "^ssiu-[0-9]+$": 203 type: object 204 additionalProperties: false 205 206 properties: 207 dmas: 208 maxItems: 2 209 dma-names: 210 allOf: 211 - items: 212 enum: 213 - tx 214 - rx 215 required: 216 - dmas 217 - dma-names 218 additionalProperties: false 219 220 rcar_sound,ssi: 221 description: SSI subnode. 222 type: object 223 patternProperties: 224 "^ssi-[0-9]$": 225 type: object 226 additionalProperties: false 227 228 properties: 229 interrupts: 230 maxItems: 1 231 dmas: 232 minItems: 2 233 maxItems: 4 234 dma-names: 235 allOf: 236 - items: 237 enum: 238 - tx 239 - rx 240 - txu # if no ssiu node 241 - rxu # if no ssiu node 242 243 shared-pin: 244 description: shared clock pin 245 $ref: /schemas/types.yaml#/definitions/flag 246 pio-transfer: 247 description: PIO transfer mode 248 $ref: /schemas/types.yaml#/definitions/flag 249 no-busif: 250 description: BUSIF is not used when [mem -> SSI] via DMA case 251 $ref: /schemas/types.yaml#/definitions/flag 252 required: 253 - interrupts 254 - dmas 255 - dma-names 256 additionalProperties: false 257 258 # For DAI base 259 rcar_sound,dai: 260 description: DAI subnode. 261 type: object 262 patternProperties: 263 "^dai([0-9]+)?$": 264 type: object 265 additionalProperties: false 266 267 properties: 268 playback: 269 $ref: /schemas/types.yaml#/definitions/phandle-array 270 capture: 271 $ref: /schemas/types.yaml#/definitions/phandle-array 272 anyOf: 273 - required: 274 - playback 275 - required: 276 - capture 277 additionalProperties: false 278 279required: 280 - compatible 281 - reg 282 - reg-names 283 - clocks 284 - clock-names 285 - "#sound-dai-cells" 286 287allOf: 288 - $ref: dai-common.yaml# 289 - if: 290 properties: 291 compatible: 292 contains: 293 const: renesas,rcar_sound-gen1 294 then: 295 properties: 296 reg: 297 maxItems: 3 298 reg-names: 299 maxItems: 3 300 items: 301 enum: 302 - scu 303 - ssi 304 - adg 305 else: 306 properties: 307 reg: 308 maxItems: 5 309 reg-names: 310 maxItems: 5 311 items: 312 enum: 313 - scu 314 - adg 315 - ssiu 316 - ssi 317 - audmapp 318 319unevaluatedProperties: false 320 321examples: 322 - | 323 rcar_sound: sound@ec500000 { 324 #sound-dai-cells = <1>; 325 compatible = "renesas,rcar_sound-r8a7790", "renesas,rcar_sound-gen2"; 326 reg = <0xec500000 0x1000>, /* SCU */ 327 <0xec5a0000 0x100>, /* ADG */ 328 <0xec540000 0x1000>, /* SSIU */ 329 <0xec541000 0x1280>, /* SSI */ 330 <0xec740000 0x200>; /* Audio DMAC peri peri*/ 331 reg-names = "scu", "adg", "ssiu", "ssi", "audmapp"; 332 333 clocks = <&mstp10_clks 1005>, /* SSI-ALL */ 334 <&mstp10_clks 1006>, <&mstp10_clks 1007>, /* SSI9, SSI8 */ 335 <&mstp10_clks 1008>, <&mstp10_clks 1009>, /* SSI7, SSI6 */ 336 <&mstp10_clks 1010>, <&mstp10_clks 1011>, /* SSI5, SSI4 */ 337 <&mstp10_clks 1012>, <&mstp10_clks 1013>, /* SSI3, SSI2 */ 338 <&mstp10_clks 1014>, <&mstp10_clks 1015>, /* SSI1, SSI0 */ 339 <&mstp10_clks 1022>, <&mstp10_clks 1023>, /* SRC9, SRC8 */ 340 <&mstp10_clks 1024>, <&mstp10_clks 1025>, /* SRC7, SRC6 */ 341 <&mstp10_clks 1026>, <&mstp10_clks 1027>, /* SRC5, SRC4 */ 342 <&mstp10_clks 1028>, <&mstp10_clks 1029>, /* SRC3, SRC2 */ 343 <&mstp10_clks 1030>, <&mstp10_clks 1031>, /* SRC1, SRC0 */ 344 <&mstp10_clks 1020>, <&mstp10_clks 1021>, /* MIX1, MIX0 */ 345 <&mstp10_clks 1020>, <&mstp10_clks 1021>, /* CTU1, CTU0 */ 346 <&mstp10_clks 1019>, <&mstp10_clks 1018>, /* DVC0, DVC1 */ 347 <&audio_clk_a>, <&audio_clk_b>, /* CLKA, CLKB */ 348 <&audio_clk_c>, <&audio_clk_i>; /* CLKC, CLKI */ 349 350 clock-names = "ssi-all", 351 "ssi.9", "ssi.8", 352 "ssi.7", "ssi.6", 353 "ssi.5", "ssi.4", 354 "ssi.3", "ssi.2", 355 "ssi.1", "ssi.0", 356 "src.9", "src.8", 357 "src.7", "src.6", 358 "src.5", "src.4", 359 "src.3", "src.2", 360 "src.1", "src.0", 361 "mix.1", "mix.0", 362 "ctu.1", "ctu.0", 363 "dvc.0", "dvc.1", 364 "clk_a", "clk_b", 365 "clk_c", "clk_i"; 366 367 rcar_sound,dvc { 368 dvc0: dvc-0 { 369 dmas = <&audma0 0xbc>; 370 dma-names = "tx"; 371 }; 372 dvc1: dvc-1 { 373 dmas = <&audma0 0xbe>; 374 dma-names = "tx"; 375 }; 376 }; 377 378 rcar_sound,mix { 379 mix0: mix-0 { }; 380 mix1: mix-1 { }; 381 }; 382 383 rcar_sound,ctu { 384 ctu00: ctu-0 { }; 385 ctu01: ctu-1 { }; 386 ctu02: ctu-2 { }; 387 ctu03: ctu-3 { }; 388 ctu10: ctu-4 { }; 389 ctu11: ctu-5 { }; 390 ctu12: ctu-6 { }; 391 ctu13: ctu-7 { }; 392 }; 393 394 rcar_sound,src { 395 src0: src-0 { 396 status = "disabled"; 397 }; 398 src1: src-1 { 399 interrupts = <0 353 0>; 400 dmas = <&audma0 0x87>, <&audma1 0x9c>; 401 dma-names = "rx", "tx"; 402 }; 403 /* skip after src-2 */ 404 }; 405 406 rcar_sound,ssiu { 407 ssiu00: ssiu-0 { 408 dmas = <&audma0 0x15>, <&audma1 0x16>; 409 dma-names = "rx", "tx"; 410 }; 411 ssiu01: ssiu-1 { 412 dmas = <&audma0 0x35>, <&audma1 0x36>; 413 dma-names = "rx", "tx"; 414 }; 415 /* skip after ssiu-2 */ 416 }; 417 418 rcar_sound,ssi { 419 ssi0: ssi-0 { 420 interrupts = <0 370 1>; 421 dmas = <&audma0 0x01>, <&audma1 0x02>; 422 dma-names = "rx", "tx"; 423 }; 424 ssi1: ssi-1 { 425 interrupts = <0 371 1>; 426 dmas = <&audma0 0x03>, <&audma1 0x04>; 427 dma-names = "rx", "tx"; 428 }; 429 /* skip other ssi-2 */ 430 }; 431 432 /* DAI base */ 433 rcar_sound,dai { 434 dai0 { 435 playback = <&ssi5>, <&src5>; 436 capture = <&ssi6>; 437 }; 438 dai1 { 439 playback = <&ssi3>; 440 }; 441 dai2 { 442 capture = <&ssi4>; 443 }; 444 dai3 { 445 playback = <&ssi7>; 446 }; 447 dai4 { 448 capture = <&ssi8>; 449 }; 450 }; 451 452 /* assume audio-graph */ 453 port { 454 rsnd_endpoint: endpoint { 455 remote-endpoint = <&codec_endpoint>; 456 457 dai-format = "left_j"; 458 bitclock-master = <&rsnd_endpoint0>; 459 frame-master = <&rsnd_endpoint0>; 460 461 playback = <&ssi0>, <&src0>, <&dvc0>; 462 capture = <&ssi1>, <&src1>, <&dvc1>; 463 }; 464 }; 465 }; 466 467 468 /* assume audio-graph */ 469 codec { 470 port { 471 codec_endpoint: endpoint { 472 remote-endpoint = <&rsnd_endpoint>; 473 }; 474 }; 475 }; 476