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