1Renesas R-Car sound 2 3Required properties: 4- compatible : "renesas,rcar_sound-<soctype>", fallbacks 5 "renesas,rcar_sound-gen1" if generation1, and 6 "renesas,rcar_sound-gen2" if generation2 7 "renesas,rcar_sound-gen3" if generation3 8 Examples with soctypes are: 9 - "renesas,rcar_sound-r8a7778" (R-Car M1A) 10 - "renesas,rcar_sound-r8a7779" (R-Car H1) 11 - "renesas,rcar_sound-r8a7790" (R-Car H2) 12 - "renesas,rcar_sound-r8a7791" (R-Car M2-W) 13 - "renesas,rcar_sound-r8a7793" (R-Car M2-N) 14 - "renesas,rcar_sound-r8a7794" (R-Car E2) 15 - "renesas,rcar_sound-r8a7795" (R-Car H3) 16- reg : Should contain the register physical address. 17 required register is 18 SRU/ADG/SSI if generation1 19 SRU/ADG/SSIU/SSI if generation2 20- rcar_sound,ssi : Should contain SSI feature. 21 The number of SSI subnode should be same as HW. 22 see below for detail. 23- rcar_sound,src : Should contain SRC feature. 24 The number of SRC subnode should be same as HW. 25 see below for detail. 26- rcar_sound,ctu : Should contain CTU feature. 27 The number of CTU subnode should be same as HW. 28 see below for detail. 29- rcar_sound,mix : Should contain MIX feature. 30 The number of MIX subnode should be same as HW. 31 see below for detail. 32- rcar_sound,dvc : Should contain DVC feature. 33 The number of DVC subnode should be same as HW. 34 see below for detail. 35- rcar_sound,dai : DAI contents. 36 The number of DAI subnode should be same as HW. 37 see below for detail. 38- #sound-dai-cells : it must be 0 if your system is using single DAI 39 it must be 1 if your system is using multi DAI 40 41Optional properties: 42- #clock-cells : it must be 0 if your system has audio_clkout 43 it must be 1 if your system has audio_clkout0/1/2/3 44- clock-frequency : for all audio_clkout0/1/2/3 45 46SSI subnode properties: 47- interrupts : Should contain SSI interrupt for PIO transfer 48- shared-pin : if shared clock pin 49- pio-transfer : use PIO transfer mode 50- no-busif : BUSIF is not ussed when [mem -> SSI] via DMA case 51- dma : Should contain Audio DMAC entry 52- dma-names : SSI case "rx" (=playback), "tx" (=capture) 53 SSIU case "rxu" (=playback), "txu" (=capture) 54 55SRC subnode properties: 56- dma : Should contain Audio DMAC entry 57- dma-names : "rx" (=playback), "tx" (=capture) 58 59DVC subnode properties: 60- dma : Should contain Audio DMAC entry 61- dma-names : "tx" (=playback/capture) 62 63DAI subnode properties: 64- playback : list of playback modules 65- capture : list of capture modules 66 67Example: 68 69rcar_sound: sound@ec500000 { 70 #sound-dai-cells = <1>; 71 compatible = "renesas,rcar_sound-r8a7791", "renesas,rcar_sound-gen2"; 72 reg = <0 0xec500000 0 0x1000>, /* SCU */ 73 <0 0xec5a0000 0 0x100>, /* ADG */ 74 <0 0xec540000 0 0x1000>, /* SSIU */ 75 <0 0xec541000 0 0x1280>, /* SSI */ 76 <0 0xec740000 0 0x200>; /* Audio DMAC peri peri*/ 77 reg-names = "scu", "adg", "ssiu", "ssi", "audmapp"; 78 79 clocks = <&mstp10_clks R8A7790_CLK_SSI_ALL>, 80 <&mstp10_clks R8A7790_CLK_SSI9>, <&mstp10_clks R8A7790_CLK_SSI8>, 81 <&mstp10_clks R8A7790_CLK_SSI7>, <&mstp10_clks R8A7790_CLK_SSI6>, 82 <&mstp10_clks R8A7790_CLK_SSI5>, <&mstp10_clks R8A7790_CLK_SSI4>, 83 <&mstp10_clks R8A7790_CLK_SSI3>, <&mstp10_clks R8A7790_CLK_SSI2>, 84 <&mstp10_clks R8A7790_CLK_SSI1>, <&mstp10_clks R8A7790_CLK_SSI0>, 85 <&mstp10_clks R8A7790_CLK_SCU_SRC9>, <&mstp10_clks R8A7790_CLK_SCU_SRC8>, 86 <&mstp10_clks R8A7790_CLK_SCU_SRC7>, <&mstp10_clks R8A7790_CLK_SCU_SRC6>, 87 <&mstp10_clks R8A7790_CLK_SCU_SRC5>, <&mstp10_clks R8A7790_CLK_SCU_SRC4>, 88 <&mstp10_clks R8A7790_CLK_SCU_SRC3>, <&mstp10_clks R8A7790_CLK_SCU_SRC2>, 89 <&mstp10_clks R8A7790_CLK_SCU_SRC1>, <&mstp10_clks R8A7790_CLK_SCU_SRC0>, 90 <&mstp10_clks R8A7790_CLK_SCU_DVC0>, <&mstp10_clks R8A7790_CLK_SCU_DVC1>, 91 <&audio_clk_a>, <&audio_clk_b>, <&audio_clk_c>, <&m2_clk>; 92 clock-names = "ssi-all", 93 "ssi.9", "ssi.8", "ssi.7", "ssi.6", "ssi.5", 94 "ssi.4", "ssi.3", "ssi.2", "ssi.1", "ssi.0", 95 "src.9", "src.8", "src.7", "src.6", "src.5", 96 "src.4", "src.3", "src.2", "src.1", "src.0", 97 "dvc.0", "dvc.1", 98 "clk_a", "clk_b", "clk_c", "clk_i"; 99 100 rcar_sound,dvc { 101 dvc0: dvc@0 { 102 dmas = <&audma0 0xbc>; 103 dma-names = "tx"; 104 }; 105 dvc1: dvc@1 { 106 dmas = <&audma0 0xbe>; 107 dma-names = "tx"; 108 }; 109 }; 110 111 rcar_sound,mix { 112 mix0: mix@0 { }; 113 mix1: mix@1 { }; 114 }; 115 116 rcar_sound,ctu { 117 ctu00: ctu@0 { }; 118 ctu01: ctu@1 { }; 119 ctu02: ctu@2 { }; 120 ctu03: ctu@3 { }; 121 ctu10: ctu@4 { }; 122 ctu11: ctu@5 { }; 123 ctu12: ctu@6 { }; 124 ctu13: ctu@7 { }; 125 }; 126 127 rcar_sound,src { 128 src0: src@0 { 129 interrupts = <0 352 IRQ_TYPE_LEVEL_HIGH>; 130 dmas = <&audma0 0x85>, <&audma1 0x9a>; 131 dma-names = "rx", "tx"; 132 }; 133 src1: src@1 { 134 interrupts = <0 353 IRQ_TYPE_LEVEL_HIGH>; 135 dmas = <&audma0 0x87>, <&audma1 0x9c>; 136 dma-names = "rx", "tx"; 137 }; 138 src2: src@2 { 139 interrupts = <0 354 IRQ_TYPE_LEVEL_HIGH>; 140 dmas = <&audma0 0x89>, <&audma1 0x9e>; 141 dma-names = "rx", "tx"; 142 }; 143 src3: src@3 { 144 interrupts = <0 355 IRQ_TYPE_LEVEL_HIGH>; 145 dmas = <&audma0 0x8b>, <&audma1 0xa0>; 146 dma-names = "rx", "tx"; 147 }; 148 src4: src@4 { 149 interrupts = <0 356 IRQ_TYPE_LEVEL_HIGH>; 150 dmas = <&audma0 0x8d>, <&audma1 0xb0>; 151 dma-names = "rx", "tx"; 152 }; 153 src5: src@5 { 154 interrupts = <0 357 IRQ_TYPE_LEVEL_HIGH>; 155 dmas = <&audma0 0x8f>, <&audma1 0xb2>; 156 dma-names = "rx", "tx"; 157 }; 158 src6: src@6 { 159 interrupts = <0 358 IRQ_TYPE_LEVEL_HIGH>; 160 dmas = <&audma0 0x91>, <&audma1 0xb4>; 161 dma-names = "rx", "tx"; 162 }; 163 src7: src@7 { 164 interrupts = <0 359 IRQ_TYPE_LEVEL_HIGH>; 165 dmas = <&audma0 0x93>, <&audma1 0xb6>; 166 dma-names = "rx", "tx"; 167 }; 168 src8: src@8 { 169 interrupts = <0 360 IRQ_TYPE_LEVEL_HIGH>; 170 dmas = <&audma0 0x95>, <&audma1 0xb8>; 171 dma-names = "rx", "tx"; 172 }; 173 src9: src@9 { 174 interrupts = <0 361 IRQ_TYPE_LEVEL_HIGH>; 175 dmas = <&audma0 0x97>, <&audma1 0xba>; 176 dma-names = "rx", "tx"; 177 }; 178 }; 179 180 rcar_sound,ssi { 181 ssi0: ssi@0 { 182 interrupts = <0 370 IRQ_TYPE_LEVEL_HIGH>; 183 dmas = <&audma0 0x01>, <&audma1 0x02>, <&audma0 0x15>, <&audma1 0x16>; 184 dma-names = "rx", "tx", "rxu", "txu"; 185 }; 186 ssi1: ssi@1 { 187 interrupts = <0 371 IRQ_TYPE_LEVEL_HIGH>; 188 dmas = <&audma0 0x03>, <&audma1 0x04>, <&audma0 0x49>, <&audma1 0x4a>; 189 dma-names = "rx", "tx", "rxu", "txu"; 190 }; 191 ssi2: ssi@2 { 192 interrupts = <0 372 IRQ_TYPE_LEVEL_HIGH>; 193 dmas = <&audma0 0x05>, <&audma1 0x06>, <&audma0 0x63>, <&audma1 0x64>; 194 dma-names = "rx", "tx", "rxu", "txu"; 195 }; 196 ssi3: ssi@3 { 197 interrupts = <0 373 IRQ_TYPE_LEVEL_HIGH>; 198 dmas = <&audma0 0x07>, <&audma1 0x08>, <&audma0 0x6f>, <&audma1 0x70>; 199 dma-names = "rx", "tx", "rxu", "txu"; 200 }; 201 ssi4: ssi@4 { 202 interrupts = <0 374 IRQ_TYPE_LEVEL_HIGH>; 203 dmas = <&audma0 0x09>, <&audma1 0x0a>, <&audma0 0x71>, <&audma1 0x72>; 204 dma-names = "rx", "tx", "rxu", "txu"; 205 }; 206 ssi5: ssi@5 { 207 interrupts = <0 375 IRQ_TYPE_LEVEL_HIGH>; 208 dmas = <&audma0 0x0b>, <&audma1 0x0c>, <&audma0 0x73>, <&audma1 0x74>; 209 dma-names = "rx", "tx", "rxu", "txu"; 210 }; 211 ssi6: ssi@6 { 212 interrupts = <0 376 IRQ_TYPE_LEVEL_HIGH>; 213 dmas = <&audma0 0x0d>, <&audma1 0x0e>, <&audma0 0x75>, <&audma1 0x76>; 214 dma-names = "rx", "tx", "rxu", "txu"; 215 }; 216 ssi7: ssi@7 { 217 interrupts = <0 377 IRQ_TYPE_LEVEL_HIGH>; 218 dmas = <&audma0 0x0f>, <&audma1 0x10>, <&audma0 0x79>, <&audma1 0x7a>; 219 dma-names = "rx", "tx", "rxu", "txu"; 220 }; 221 ssi8: ssi@8 { 222 interrupts = <0 378 IRQ_TYPE_LEVEL_HIGH>; 223 dmas = <&audma0 0x11>, <&audma1 0x12>, <&audma0 0x7b>, <&audma1 0x7c>; 224 dma-names = "rx", "tx", "rxu", "txu"; 225 }; 226 ssi9: ssi@9 { 227 interrupts = <0 379 IRQ_TYPE_LEVEL_HIGH>; 228 dmas = <&audma0 0x13>, <&audma1 0x14>, <&audma0 0x7d>, <&audma1 0x7e>; 229 dma-names = "rx", "tx", "rxu", "txu"; 230 }; 231 }; 232 233 rcar_sound,dai { 234 dai0 { 235 playback = <&ssi5 &src5>; 236 capture = <&ssi6>; 237 }; 238 dai1 { 239 playback = <&ssi3>; 240 }; 241 dai2 { 242 capture = <&ssi4>; 243 }; 244 dai3 { 245 playback = <&ssi7>; 246 }; 247 dai4 { 248 capture = <&ssi8>; 249 }; 250 }; 251}; 252 253Example: simple sound card 254 255 rsnd_ak4643: sound { 256 compatible = "simple-audio-card"; 257 258 simple-audio-card,format = "left_j"; 259 simple-audio-card,bitclock-master = <&sndcodec>; 260 simple-audio-card,frame-master = <&sndcodec>; 261 262 sndcpu: simple-audio-card,cpu { 263 sound-dai = <&rcar_sound>; 264 }; 265 266 sndcodec: simple-audio-card,codec { 267 sound-dai = <&ak4643>; 268 clocks = <&audio_clock>; 269 }; 270 }; 271 272&rcar_sound { 273 pinctrl-0 = <&sound_pins &sound_clk_pins>; 274 pinctrl-names = "default"; 275 276 /* Single DAI */ 277 #sound-dai-cells = <0>; 278 279 status = "okay"; 280 281 rcar_sound,dai { 282 dai0 { 283 playback = <&ssi0 &src2 &dvc0>; 284 capture = <&ssi1 &src3 &dvc1>; 285 }; 286 }; 287}; 288 289&ssi1 { 290 shared-pin; 291}; 292 293Example: simple sound card for TDM 294 295 rsnd_tdm: sound { 296 compatible = "simple-audio-card"; 297 298 simple-audio-card,format = "left_j"; 299 simple-audio-card,bitclock-master = <&sndcodec>; 300 simple-audio-card,frame-master = <&sndcodec>; 301 302 sndcpu: simple-audio-card,cpu { 303 sound-dai = <&rcar_sound>; 304 dai-tdm-slot-num = <6>; 305 }; 306 307 sndcodec: simple-audio-card,codec { 308 sound-dai = <&xxx>; 309 }; 310 }; 311 312Example: simple sound card for Multi channel 313 314&rcar_sound { 315 pinctrl-0 = <&sound_pins &sound_clk_pins>; 316 pinctrl-names = "default"; 317 318 /* Single DAI */ 319 #sound-dai-cells = <0>; 320 321 status = "okay"; 322 323 rcar_sound,dai { 324 dai0 { 325 playback = <&ssi0 &ssi1 &ssi2 &src0 &dvc0>; 326 }; 327 }; 328}; 329