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