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