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 This is used on simple-audio-card 68 enum: [0, 1] 69 70 "#clock-cells": 71 description: | 72 it must be 0 if your system has audio_clkout 73 it must be 1 if your system has audio_clkout0/1/2/3 74 enum: [0, 1] 75 76 clock-frequency: 77 description: for audio_clkout0/1/2/3 78 79 clkout-lr-asynchronous: 80 description: audio_clkoutn is asynchronizes with lr-clock. 81 $ref: /schemas/types.yaml#/definitions/flag 82 83 power-domains: true 84 85 resets: 86 minItems: 1 87 maxItems: 11 88 89 reset-names: 90 minItems: 1 91 maxItems: 11 92 93 clocks: 94 description: References to SSI/SRC/MIX/CTU/DVC/AUDIO_CLK clocks. 95 minItems: 1 96 maxItems: 31 97 98 clock-names: 99 description: List of necessary clock names. 100 minItems: 1 101 maxItems: 31 102 items: 103 oneOf: 104 - const: ssi-all 105 - pattern: '^ssi\.[0-9]$' 106 - pattern: '^src\.[0-9]$' 107 - pattern: '^mix\.[0-1]$' 108 - pattern: '^ctu\.[0-1]$' 109 - pattern: '^dvc\.[0-1]$' 110 - pattern: '^clk_(a|b|c|i)$' 111 112 ports: 113 $ref: audio-graph-port.yaml#/definitions/port-base 114 unevaluatedProperties: false 115 patternProperties: 116 '^port(@[0-9a-f]+)?$': 117 $ref: audio-graph-port.yaml#/definitions/port-base 118 unevaluatedProperties: false 119 patternProperties: 120 "^endpoint(@[0-9a-f]+)?": 121 $ref: audio-graph-port.yaml#/definitions/endpoint-base 122 properties: 123 playback: 124 $ref: /schemas/types.yaml#/definitions/phandle-array 125 capture: 126 $ref: /schemas/types.yaml#/definitions/phandle-array 127 unevaluatedProperties: false 128 129 port: 130 $ref: audio-graph-port.yaml#/definitions/port-base 131 unevaluatedProperties: false 132 patternProperties: 133 "^endpoint(@[0-9a-f]+)?": 134 $ref: audio-graph-port.yaml#/definitions/endpoint-base 135 properties: 136 playback: 137 $ref: /schemas/types.yaml#/definitions/phandle-array 138 capture: 139 $ref: /schemas/types.yaml#/definitions/phandle-array 140 unevaluatedProperties: false 141 142 rcar_sound,dvc: 143 description: DVC subnode. 144 type: object 145 patternProperties: 146 "^dvc-[0-1]$": 147 type: object 148 additionalProperties: false 149 150 properties: 151 dmas: 152 maxItems: 1 153 dma-names: 154 const: "tx" 155 required: 156 - dmas 157 - dma-names 158 additionalProperties: false 159 160 rcar_sound,mix: 161 description: MIX subnode. 162 type: object 163 patternProperties: 164 "^mix-[0-1]$": 165 type: object 166 additionalProperties: false 167 additionalProperties: false 168 169 rcar_sound,ctu: 170 description: CTU subnode. 171 type: object 172 patternProperties: 173 "^ctu-[0-7]$": 174 type: object 175 additionalProperties: false 176 additionalProperties: false 177 178 rcar_sound,src: 179 description: SRC subnode. 180 type: object 181 patternProperties: 182 "^src-[0-9]$": 183 type: object 184 additionalProperties: false 185 186 properties: 187 interrupts: 188 maxItems: 1 189 dmas: 190 maxItems: 2 191 dma-names: 192 allOf: 193 - items: 194 enum: 195 - tx 196 - rx 197 additionalProperties: false 198 199 rcar_sound,ssiu: 200 description: SSIU subnode. 201 type: object 202 patternProperties: 203 "^ssiu-[0-9]+$": 204 type: object 205 additionalProperties: false 206 207 properties: 208 dmas: 209 maxItems: 2 210 dma-names: 211 allOf: 212 - items: 213 enum: 214 - tx 215 - rx 216 required: 217 - dmas 218 - dma-names 219 additionalProperties: false 220 221 rcar_sound,ssi: 222 description: SSI subnode. 223 type: object 224 patternProperties: 225 "^ssi-[0-9]$": 226 type: object 227 additionalProperties: false 228 229 properties: 230 interrupts: 231 maxItems: 1 232 dmas: 233 minItems: 2 234 maxItems: 4 235 dma-names: 236 allOf: 237 - items: 238 enum: 239 - tx 240 - rx 241 - txu # if no ssiu node 242 - rxu # if no ssiu node 243 244 shared-pin: 245 description: shared clock pin 246 $ref: /schemas/types.yaml#/definitions/flag 247 pio-transfer: 248 description: PIO transfer mode 249 $ref: /schemas/types.yaml#/definitions/flag 250 no-busif: 251 description: BUSIF is not used when [mem -> SSI] via DMA case 252 $ref: /schemas/types.yaml#/definitions/flag 253 required: 254 - interrupts 255 - dmas 256 - dma-names 257 additionalProperties: false 258 259 # For DAI base 260 rcar_sound,dai: 261 description: DAI subnode. 262 type: object 263 patternProperties: 264 "^dai([0-9]+)?$": 265 type: object 266 additionalProperties: false 267 268 properties: 269 playback: 270 $ref: /schemas/types.yaml#/definitions/phandle-array 271 capture: 272 $ref: /schemas/types.yaml#/definitions/phandle-array 273 anyOf: 274 - required: 275 - playback 276 - required: 277 - capture 278 additionalProperties: false 279 280required: 281 - compatible 282 - reg 283 - reg-names 284 - clocks 285 - clock-names 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