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