Commit | Line | Data |
---|---|---|
90e8e50f KM |
1 | Renesas R-Car sound |
2 | ||
f1511a14 KM |
3 | ============================================= |
4 | * Modules | |
5 | ============================================= | |
6 | ||
7 | Renesas R-Car sound is constructed from below modules | |
8 | (for Gen2 or later) | |
9 | ||
10 | SCU : Sampling Rate Converter Unit | |
11 | - SRC : Sampling Rate Converter | |
12 | - CMD | |
13 | - CTU : Channel Transfer Unit | |
14 | - MIX : Mixer | |
15 | - DVC : Digital Volume and Mute Function | |
16 | SSIU : Serial Sound Interface Unit | |
17 | SSI : Serial Sound Interface | |
18 | ||
19 | See detail of each module's channels, connection, limitation on datasheet | |
20 | ||
21 | ============================================= | |
22 | * Multi channel | |
23 | ============================================= | |
24 | ||
25 | Multi channel is supported by Multi-SSI, or TDM-SSI. | |
26 | ||
27 | Multi-SSI : 6ch case, you can use stereo x 3 SSI | |
28 | TDM-SSI : 6ch case, you can use TDM | |
29 | ||
30 | ============================================= | |
31 | * Enable/Disable each modules | |
32 | ============================================= | |
33 | ||
34 | See datasheet to check SRC/CTU/MIX/DVC connect-limitation. | |
35 | DT controls enabling/disabling module. | |
36 | ${LINUX}/arch/arm/boot/dts/r8a7790-lager.dts can be good example. | |
37 | This is example of | |
38 | ||
39 | Playback: [MEM] -> [SRC2] -> [DVC0] -> [SSIU0/SSI0] -> [codec] | |
40 | Capture: [MEM] <- [DVC1] <- [SRC3] <- [SSIU1/SSI1] <- [codec] | |
41 | ||
42 | &rcar_sound { | |
43 | ... | |
44 | rcar_sound,dai { | |
45 | dai0 { | |
46 | playback = <&ssi0 &src2 &dvc0>; | |
47 | capture = <&ssi1 &src3 &dvc1>; | |
48 | }; | |
49 | }; | |
50 | }; | |
51 | ||
52 | You can use below. | |
53 | ${LINUX}/arch/arm/boot/dts/r8a7790.dts can be good example. | |
54 | ||
55 | &src0 &ctu00 &mix0 &dvc0 &ssi0 | |
56 | &src1 &ctu01 &mix1 &dvc1 &ssi1 | |
57 | &src2 &ctu02 &ssi2 | |
58 | &src3 &ctu03 &ssi3 | |
59 | &src4 &ssi4 | |
60 | &src5 &ctu10 &ssi5 | |
61 | &src6 &ctu11 &ssi6 | |
62 | &src7 &ctu12 &ssi7 | |
63 | &src8 &ctu13 &ssi8 | |
64 | &src9 &ssi9 | |
65 | ||
66 | ============================================= | |
67 | * SRC (Sampling Rate Converter) | |
68 | ============================================= | |
69 | ||
70 | [xx]Hz [yy]Hz | |
71 | ------> [SRC] ------> | |
72 | ||
73 | SRC can convert [xx]Hz to [yy]Hz. Then, it has below 2 modes | |
74 | ||
75 | Asynchronous mode: input data / output data are based on different clocks. | |
76 | you can use this mode on Playback / Capture | |
77 | Synchronous mode: input data / output data are based on same clocks. | |
78 | This mode will be used if system doesn't have its input clock, | |
79 | for example digital TV case. | |
80 | you can use this mode on Playback | |
81 | ||
82 | ------------------ | |
83 | ** Asynchronous mode | |
84 | ------------------ | |
85 | ||
86 | You need to use "renesas,rsrc-card" sound card for it. | |
87 | example) | |
88 | ||
89 | sound { | |
90 | compatible = "renesas,rsrc-card"; | |
91 | ... | |
92 | /* | |
93 | * SRC Asynchronous mode setting | |
94 | * Playback: | |
95 | * All input data will be converted to 48kHz | |
96 | * Capture: | |
97 | * Inputed 48kHz data will be converted to | |
98 | * system specified Hz | |
99 | */ | |
100 | convert-rate = <48000>; | |
101 | ... | |
102 | cpu { | |
103 | sound-dai = <&rcar_sound>; | |
104 | }; | |
105 | codec { | |
106 | ... | |
107 | }; | |
108 | }; | |
109 | ||
110 | ------------------ | |
111 | ** Synchronous mode | |
112 | ------------------ | |
113 | ||
114 | > amixer set "SRC Out Rate" on | |
115 | > aplay xxxx.wav | |
116 | > amixer set "SRC Out Rate" 48000 | |
117 | > amixer set "SRC Out Rate" 44100 | |
118 | ||
119 | ============================================= | |
120 | * CTU (Channel Transfer Unit) | |
121 | ============================================= | |
122 | ||
123 | [xx]ch [yy]ch | |
124 | ------> [CTU] --------> | |
125 | ||
126 | CTU can convert [xx]ch to [yy]ch, or exchange outputed channel. | |
127 | CTU conversion needs matrix settings. | |
128 | For more detail information, see below | |
129 | ||
130 | Renesas R-Car datasheet | |
131 | - Sampling Rate Converter Unit (SCU) | |
132 | - SCU Operation | |
133 | - CMD Block | |
134 | - Functional Blocks in CMD | |
135 | ||
136 | Renesas R-Car datasheet | |
137 | - Sampling Rate Converter Unit (SCU) | |
138 | - Register Description | |
139 | - CTUn Scale Value exx Register (CTUn_SVxxR) | |
140 | ||
141 | ${LINUX}/sound/soc/sh/rcar/ctu.c | |
142 | - comment of header | |
143 | ||
144 | You need to use "renesas,rsrc-card" sound card for it. | |
145 | example) | |
146 | ||
147 | sound { | |
148 | compatible = "renesas,rsrc-card"; | |
149 | ... | |
150 | /* | |
151 | * CTU setting | |
152 | * All input data will be converted to 2ch | |
153 | * as output data | |
154 | */ | |
155 | convert-channels = <2>; | |
156 | ... | |
157 | cpu { | |
158 | sound-dai = <&rcar_sound>; | |
159 | }; | |
160 | codec { | |
161 | ... | |
162 | }; | |
163 | }; | |
164 | ||
165 | Ex) Exchange output channel | |
166 | Input -> Output | |
167 | 1ch -> 0ch | |
168 | 0ch -> 1ch | |
169 | ||
170 | example of using matrix | |
171 | output 0ch = (input 0ch x 0) + (input 1ch x 1) | |
172 | output 1ch = (input 0ch x 1) + (input 1ch x 0) | |
173 | ||
174 | amixer set "CTU Reset" on | |
175 | amixer set "CTU Pass" 9,10 | |
176 | amixer set "CTU SV0" 0,4194304 | |
177 | amixer set "CTU SV1" 4194304,0 | |
178 | ||
179 | example of changing connection | |
180 | amixer set "CTU Reset" on | |
181 | amixer set "CTU Pass" 2,1 | |
182 | ||
183 | ============================================= | |
184 | * MIX (Mixer) | |
185 | ============================================= | |
186 | ||
187 | MIX merges 2 sounds path. You can see 2 sound interface on system, | |
188 | and these sounds will be merged by MIX. | |
189 | ||
190 | aplay -D plughw:0,0 xxxx.wav & | |
191 | aplay -D plughw:0,1 yyyy.wav | |
192 | ||
193 | You need to use "renesas,rsrc-card" sound card for it. | |
194 | Ex) | |
195 | [MEM] -> [SRC1] -> [CTU02] -+-> [MIX0] -> [DVC0] -> [SSI0] | |
196 | | | |
197 | [MEM] -> [SRC2] -> [CTU03] -+ | |
198 | ||
199 | sound { | |
200 | compatible = "renesas,rsrc-card"; | |
201 | ... | |
202 | cpu@0 { | |
203 | sound-dai = <&rcar_sound 0>; | |
204 | }; | |
205 | cpu@1 { | |
206 | sound-dai = <&rcar_sound 1>; | |
207 | }; | |
208 | codec { | |
209 | ... | |
210 | }; | |
211 | }; | |
212 | ||
213 | &rcar_sound { | |
214 | ... | |
215 | rcar_sound,dai { | |
216 | dai0 { | |
217 | playback = <&src1 &ctu02 &mix0 &dvc0 &ssi0>; | |
218 | }; | |
219 | dai1 { | |
220 | playback = <&src2 &ctu03 &mix0 &dvc0 &ssi0>; | |
221 | }; | |
222 | }; | |
223 | }; | |
224 | ||
225 | ============================================= | |
226 | * DVC (Digital Volume and Mute Function) | |
227 | ============================================= | |
228 | ||
229 | DVC controls Playback/Capture volume. | |
230 | ||
231 | Playback Volume | |
232 | amixer set "DVC Out" 100% | |
233 | ||
234 | Capture Volume | |
235 | amixer set "DVC In" 100% | |
236 | ||
237 | Playback Mute | |
238 | amixer set "DVC Out Mute" on | |
239 | ||
240 | Capture Mute | |
241 | amixer set "DVC In Mute" on | |
242 | ||
243 | Volume Ramp | |
244 | amixer set "DVC Out Ramp Up Rate" "0.125 dB/64 steps" | |
245 | amixer set "DVC Out Ramp Down Rate" "0.125 dB/512 steps" | |
246 | amixer set "DVC Out Ramp" on | |
247 | aplay xxx.wav & | |
248 | amixer set "DVC Out" 80% // Volume Down | |
249 | amixer set "DVC Out" 100% // Volume Up | |
250 | ||
251 | ============================================= | |
252 | * SSIU (Serial Sound Interface Unit) | |
253 | ============================================= | |
254 | ||
255 | There is no DT settings for SSIU, because SSIU will be automatically | |
256 | selected via SSI. | |
257 | SSIU can avoid some under/over run error, because it has some buffer. | |
258 | But you can't use it if SSI was PIO mode. | |
259 | In DMA mode, you can select not to use SSIU by using "no-busif" on DT. | |
260 | ||
261 | &ssi0 { | |
262 | no-busif; | |
263 | }; | |
264 | ||
265 | ============================================= | |
266 | * SSI (Serial Sound Interface) | |
267 | ============================================= | |
268 | ||
269 | ** PIO mode | |
270 | ||
271 | You can use PIO mode which is for connection check by using. | |
272 | Note: The system will drop non-SSI modules in PIO mode | |
273 | even though if DT is selecting other modules. | |
274 | ||
275 | &ssi0 { | |
276 | pio-transfer | |
277 | }; | |
278 | ||
279 | ** DMA mode without SSIU | |
280 | ||
281 | You can use DMA without SSIU. | |
282 | Note: under/over run, or noise are likely to occur | |
283 | ||
284 | &ssi0 { | |
285 | no-busif; | |
286 | }; | |
287 | ||
288 | ** PIN sharing | |
289 | ||
290 | Each SSI can share WS pin. It is based on platform. | |
291 | This is example if SSI1 want to share WS pin with SSI0 | |
292 | ||
293 | &ssi1 { | |
294 | shared-pin; | |
295 | }; | |
296 | ||
297 | ** Multi-SSI | |
298 | ||
299 | You can use Multi-SSI. | |
300 | This is example of SSI0/SSI1/SSI2 (= for 6ch) | |
301 | ||
302 | &rcar_sound { | |
303 | ... | |
304 | rcar_sound,dai { | |
305 | dai0 { | |
306 | playback = <&ssi0 &ssi1 &ssi2 &src0 &dvc0>; | |
307 | }; | |
308 | }; | |
309 | }; | |
310 | ||
311 | ** TDM-SSI | |
312 | ||
313 | You can use TDM with SSI. | |
314 | This is example of TDM 6ch. | |
315 | Driver can automatically switches TDM <-> stereo mode in this case. | |
316 | ||
317 | rsnd_tdm: sound { | |
318 | compatible = "simple-audio-card"; | |
319 | ... | |
320 | simple-audio-card,cpu { | |
321 | /* system can use TDM 6ch */ | |
322 | dai-tdm-slot-num = <6>; | |
323 | sound-dai = <&rcar_sound>; | |
324 | }; | |
325 | simple-audio-card,codec { | |
326 | ... | |
327 | }; | |
328 | }; | |
329 | ||
330 | ||
331 | ============================================= | |
90e8e50f | 332 | Required properties: |
f1511a14 KM |
333 | ============================================= |
334 | ||
56ba98ac GU |
335 | - compatible : "renesas,rcar_sound-<soctype>", fallbacks |
336 | "renesas,rcar_sound-gen1" if generation1, and | |
90e8e50f | 337 | "renesas,rcar_sound-gen2" if generation2 |
ac37a45b | 338 | "renesas,rcar_sound-gen3" if generation3 |
56ba98ac | 339 | Examples with soctypes are: |
7667f716 | 340 | - "renesas,rcar_sound-r8a7778" (R-Car M1A) |
4eb404d0 | 341 | - "renesas,rcar_sound-r8a7779" (R-Car H1) |
56ba98ac GU |
342 | - "renesas,rcar_sound-r8a7790" (R-Car H2) |
343 | - "renesas,rcar_sound-r8a7791" (R-Car M2-W) | |
4eb404d0 SH |
344 | - "renesas,rcar_sound-r8a7793" (R-Car M2-N) |
345 | - "renesas,rcar_sound-r8a7794" (R-Car E2) | |
ac37a45b | 346 | - "renesas,rcar_sound-r8a7795" (R-Car H3) |
90e8e50f KM |
347 | - reg : Should contain the register physical address. |
348 | required register is | |
349 | SRU/ADG/SSI if generation1 | |
350 | SRU/ADG/SSIU/SSI if generation2 | |
8bab0dd5 KM |
351 | - rcar_sound,ssi : Should contain SSI feature. |
352 | The number of SSI subnode should be same as HW. | |
353 | see below for detail. | |
354 | - rcar_sound,src : Should contain SRC feature. | |
355 | The number of SRC subnode should be same as HW. | |
356 | see below for detail. | |
9269e3c3 KM |
357 | - rcar_sound,ctu : Should contain CTU feature. |
358 | The number of CTU subnode should be same as HW. | |
359 | see below for detail. | |
70fb1052 KM |
360 | - rcar_sound,mix : Should contain MIX feature. |
361 | The number of MIX subnode should be same as HW. | |
362 | see below for detail. | |
34cb6123 KM |
363 | - rcar_sound,dvc : Should contain DVC feature. |
364 | The number of DVC subnode should be same as HW. | |
365 | see below for detail. | |
8bab0dd5 KM |
366 | - rcar_sound,dai : DAI contents. |
367 | The number of DAI subnode should be same as HW. | |
368 | see below for detail. | |
e3d2cec8 KM |
369 | - #sound-dai-cells : it must be 0 if your system is using single DAI |
370 | it must be 1 if your system is using multi DAI | |
209c0907 KM |
371 | |
372 | Optional properties: | |
2a46db4a KM |
373 | - #clock-cells : it must be 0 if your system has audio_clkout |
374 | it must be 1 if your system has audio_clkout0/1/2/3 | |
375 | - clock-frequency : for all audio_clkout0/1/2/3 | |
7dc20319 KM |
376 | - clkout-lr-asynchronous : boolean property. it indicates that audio_clkoutn |
377 | is asynchronizes with lr-clock. | |
90e8e50f KM |
378 | |
379 | SSI subnode properties: | |
380 | - interrupts : Should contain SSI interrupt for PIO transfer | |
381 | - shared-pin : if shared clock pin | |
199e7688 | 382 | - pio-transfer : use PIO transfer mode |
d9288d0b | 383 | - no-busif : BUSIF is not ussed when [mem -> SSI] via DMA case |
e80a2fb1 KM |
384 | - dma : Should contain Audio DMAC entry |
385 | - dma-names : SSI case "rx" (=playback), "tx" (=capture) | |
386 | SSIU case "rxu" (=playback), "txu" (=capture) | |
90e8e50f | 387 | |
8bab0dd5 | 388 | SRC subnode properties: |
e80a2fb1 KM |
389 | - dma : Should contain Audio DMAC entry |
390 | - dma-names : "rx" (=playback), "tx" (=capture) | |
391 | ||
392 | DVC subnode properties: | |
393 | - dma : Should contain Audio DMAC entry | |
394 | - dma-names : "tx" (=playback/capture) | |
8bab0dd5 | 395 | |
90e8e50f KM |
396 | DAI subnode properties: |
397 | - playback : list of playback modules | |
398 | - capture : list of capture modules | |
399 | ||
f1511a14 KM |
400 | |
401 | ============================================= | |
90e8e50f | 402 | Example: |
f1511a14 | 403 | ============================================= |
90e8e50f | 404 | |
596f74ec | 405 | rcar_sound: sound@ec500000 { |
90e8e50f | 406 | #sound-dai-cells = <1>; |
56ba98ac | 407 | compatible = "renesas,rcar_sound-r8a7791", "renesas,rcar_sound-gen2"; |
90e8e50f KM |
408 | reg = <0 0xec500000 0 0x1000>, /* SCU */ |
409 | <0 0xec5a0000 0 0x100>, /* ADG */ | |
410 | <0 0xec540000 0 0x1000>, /* SSIU */ | |
d3b1c0ba KM |
411 | <0 0xec541000 0 0x1280>, /* SSI */ |
412 | <0 0xec740000 0 0x200>; /* Audio DMAC peri peri*/ | |
413 | reg-names = "scu", "adg", "ssiu", "ssi", "audmapp"; | |
90e8e50f | 414 | |
bb02714f KM |
415 | clocks = <&mstp10_clks R8A7790_CLK_SSI_ALL>, |
416 | <&mstp10_clks R8A7790_CLK_SSI9>, <&mstp10_clks R8A7790_CLK_SSI8>, | |
417 | <&mstp10_clks R8A7790_CLK_SSI7>, <&mstp10_clks R8A7790_CLK_SSI6>, | |
418 | <&mstp10_clks R8A7790_CLK_SSI5>, <&mstp10_clks R8A7790_CLK_SSI4>, | |
419 | <&mstp10_clks R8A7790_CLK_SSI3>, <&mstp10_clks R8A7790_CLK_SSI2>, | |
420 | <&mstp10_clks R8A7790_CLK_SSI1>, <&mstp10_clks R8A7790_CLK_SSI0>, | |
421 | <&mstp10_clks R8A7790_CLK_SCU_SRC9>, <&mstp10_clks R8A7790_CLK_SCU_SRC8>, | |
422 | <&mstp10_clks R8A7790_CLK_SCU_SRC7>, <&mstp10_clks R8A7790_CLK_SCU_SRC6>, | |
423 | <&mstp10_clks R8A7790_CLK_SCU_SRC5>, <&mstp10_clks R8A7790_CLK_SCU_SRC4>, | |
424 | <&mstp10_clks R8A7790_CLK_SCU_SRC3>, <&mstp10_clks R8A7790_CLK_SCU_SRC2>, | |
425 | <&mstp10_clks R8A7790_CLK_SCU_SRC1>, <&mstp10_clks R8A7790_CLK_SCU_SRC0>, | |
426 | <&mstp10_clks R8A7790_CLK_SCU_DVC0>, <&mstp10_clks R8A7790_CLK_SCU_DVC1>, | |
427 | <&audio_clk_a>, <&audio_clk_b>, <&audio_clk_c>, <&m2_clk>; | |
428 | clock-names = "ssi-all", | |
429 | "ssi.9", "ssi.8", "ssi.7", "ssi.6", "ssi.5", | |
430 | "ssi.4", "ssi.3", "ssi.2", "ssi.1", "ssi.0", | |
431 | "src.9", "src.8", "src.7", "src.6", "src.5", | |
432 | "src.4", "src.3", "src.2", "src.1", "src.0", | |
433 | "dvc.0", "dvc.1", | |
434 | "clk_a", "clk_b", "clk_c", "clk_i"; | |
435 | ||
34cb6123 | 436 | rcar_sound,dvc { |
e80a2fb1 KM |
437 | dvc0: dvc@0 { |
438 | dmas = <&audma0 0xbc>; | |
439 | dma-names = "tx"; | |
440 | }; | |
441 | dvc1: dvc@1 { | |
442 | dmas = <&audma0 0xbe>; | |
443 | dma-names = "tx"; | |
444 | }; | |
34cb6123 KM |
445 | }; |
446 | ||
70fb1052 KM |
447 | rcar_sound,mix { |
448 | mix0: mix@0 { }; | |
449 | mix1: mix@1 { }; | |
450 | }; | |
451 | ||
9269e3c3 KM |
452 | rcar_sound,ctu { |
453 | ctu00: ctu@0 { }; | |
454 | ctu01: ctu@1 { }; | |
455 | ctu02: ctu@2 { }; | |
456 | ctu03: ctu@3 { }; | |
457 | ctu10: ctu@4 { }; | |
458 | ctu11: ctu@5 { }; | |
459 | ctu12: ctu@6 { }; | |
460 | ctu13: ctu@7 { }; | |
461 | }; | |
462 | ||
90e8e50f | 463 | rcar_sound,src { |
5cf4f686 KM |
464 | src0: src@0 { |
465 | interrupts = <0 352 IRQ_TYPE_LEVEL_HIGH>; | |
e80a2fb1 KM |
466 | dmas = <&audma0 0x85>, <&audma1 0x9a>; |
467 | dma-names = "rx", "tx"; | |
5cf4f686 KM |
468 | }; |
469 | src1: src@1 { | |
470 | interrupts = <0 353 IRQ_TYPE_LEVEL_HIGH>; | |
e80a2fb1 KM |
471 | dmas = <&audma0 0x87>, <&audma1 0x9c>; |
472 | dma-names = "rx", "tx"; | |
5cf4f686 KM |
473 | }; |
474 | src2: src@2 { | |
475 | interrupts = <0 354 IRQ_TYPE_LEVEL_HIGH>; | |
e80a2fb1 KM |
476 | dmas = <&audma0 0x89>, <&audma1 0x9e>; |
477 | dma-names = "rx", "tx"; | |
5cf4f686 KM |
478 | }; |
479 | src3: src@3 { | |
480 | interrupts = <0 355 IRQ_TYPE_LEVEL_HIGH>; | |
e80a2fb1 KM |
481 | dmas = <&audma0 0x8b>, <&audma1 0xa0>; |
482 | dma-names = "rx", "tx"; | |
5cf4f686 KM |
483 | }; |
484 | src4: src@4 { | |
485 | interrupts = <0 356 IRQ_TYPE_LEVEL_HIGH>; | |
e80a2fb1 KM |
486 | dmas = <&audma0 0x8d>, <&audma1 0xb0>; |
487 | dma-names = "rx", "tx"; | |
5cf4f686 KM |
488 | }; |
489 | src5: src@5 { | |
490 | interrupts = <0 357 IRQ_TYPE_LEVEL_HIGH>; | |
e80a2fb1 KM |
491 | dmas = <&audma0 0x8f>, <&audma1 0xb2>; |
492 | dma-names = "rx", "tx"; | |
5cf4f686 KM |
493 | }; |
494 | src6: src@6 { | |
495 | interrupts = <0 358 IRQ_TYPE_LEVEL_HIGH>; | |
e80a2fb1 KM |
496 | dmas = <&audma0 0x91>, <&audma1 0xb4>; |
497 | dma-names = "rx", "tx"; | |
5cf4f686 KM |
498 | }; |
499 | src7: src@7 { | |
500 | interrupts = <0 359 IRQ_TYPE_LEVEL_HIGH>; | |
e80a2fb1 KM |
501 | dmas = <&audma0 0x93>, <&audma1 0xb6>; |
502 | dma-names = "rx", "tx"; | |
5cf4f686 KM |
503 | }; |
504 | src8: src@8 { | |
505 | interrupts = <0 360 IRQ_TYPE_LEVEL_HIGH>; | |
e80a2fb1 KM |
506 | dmas = <&audma0 0x95>, <&audma1 0xb8>; |
507 | dma-names = "rx", "tx"; | |
5cf4f686 KM |
508 | }; |
509 | src9: src@9 { | |
510 | interrupts = <0 361 IRQ_TYPE_LEVEL_HIGH>; | |
e80a2fb1 KM |
511 | dmas = <&audma0 0x97>, <&audma1 0xba>; |
512 | dma-names = "rx", "tx"; | |
5cf4f686 | 513 | }; |
90e8e50f KM |
514 | }; |
515 | ||
516 | rcar_sound,ssi { | |
517 | ssi0: ssi@0 { | |
518 | interrupts = <0 370 IRQ_TYPE_LEVEL_HIGH>; | |
e80a2fb1 KM |
519 | dmas = <&audma0 0x01>, <&audma1 0x02>, <&audma0 0x15>, <&audma1 0x16>; |
520 | dma-names = "rx", "tx", "rxu", "txu"; | |
90e8e50f KM |
521 | }; |
522 | ssi1: ssi@1 { | |
523 | interrupts = <0 371 IRQ_TYPE_LEVEL_HIGH>; | |
e80a2fb1 KM |
524 | dmas = <&audma0 0x03>, <&audma1 0x04>, <&audma0 0x49>, <&audma1 0x4a>; |
525 | dma-names = "rx", "tx", "rxu", "txu"; | |
90e8e50f KM |
526 | }; |
527 | ssi2: ssi@2 { | |
528 | interrupts = <0 372 IRQ_TYPE_LEVEL_HIGH>; | |
e80a2fb1 KM |
529 | dmas = <&audma0 0x05>, <&audma1 0x06>, <&audma0 0x63>, <&audma1 0x64>; |
530 | dma-names = "rx", "tx", "rxu", "txu"; | |
90e8e50f KM |
531 | }; |
532 | ssi3: ssi@3 { | |
533 | interrupts = <0 373 IRQ_TYPE_LEVEL_HIGH>; | |
e80a2fb1 KM |
534 | dmas = <&audma0 0x07>, <&audma1 0x08>, <&audma0 0x6f>, <&audma1 0x70>; |
535 | dma-names = "rx", "tx", "rxu", "txu"; | |
90e8e50f KM |
536 | }; |
537 | ssi4: ssi@4 { | |
538 | interrupts = <0 374 IRQ_TYPE_LEVEL_HIGH>; | |
e80a2fb1 KM |
539 | dmas = <&audma0 0x09>, <&audma1 0x0a>, <&audma0 0x71>, <&audma1 0x72>; |
540 | dma-names = "rx", "tx", "rxu", "txu"; | |
90e8e50f KM |
541 | }; |
542 | ssi5: ssi@5 { | |
543 | interrupts = <0 375 IRQ_TYPE_LEVEL_HIGH>; | |
e80a2fb1 KM |
544 | dmas = <&audma0 0x0b>, <&audma1 0x0c>, <&audma0 0x73>, <&audma1 0x74>; |
545 | dma-names = "rx", "tx", "rxu", "txu"; | |
90e8e50f KM |
546 | }; |
547 | ssi6: ssi@6 { | |
548 | interrupts = <0 376 IRQ_TYPE_LEVEL_HIGH>; | |
e80a2fb1 KM |
549 | dmas = <&audma0 0x0d>, <&audma1 0x0e>, <&audma0 0x75>, <&audma1 0x76>; |
550 | dma-names = "rx", "tx", "rxu", "txu"; | |
90e8e50f KM |
551 | }; |
552 | ssi7: ssi@7 { | |
553 | interrupts = <0 377 IRQ_TYPE_LEVEL_HIGH>; | |
e80a2fb1 KM |
554 | dmas = <&audma0 0x0f>, <&audma1 0x10>, <&audma0 0x79>, <&audma1 0x7a>; |
555 | dma-names = "rx", "tx", "rxu", "txu"; | |
90e8e50f KM |
556 | }; |
557 | ssi8: ssi@8 { | |
558 | interrupts = <0 378 IRQ_TYPE_LEVEL_HIGH>; | |
e80a2fb1 KM |
559 | dmas = <&audma0 0x11>, <&audma1 0x12>, <&audma0 0x7b>, <&audma1 0x7c>; |
560 | dma-names = "rx", "tx", "rxu", "txu"; | |
90e8e50f KM |
561 | }; |
562 | ssi9: ssi@9 { | |
563 | interrupts = <0 379 IRQ_TYPE_LEVEL_HIGH>; | |
e80a2fb1 KM |
564 | dmas = <&audma0 0x13>, <&audma1 0x14>, <&audma0 0x7d>, <&audma1 0x7e>; |
565 | dma-names = "rx", "tx", "rxu", "txu"; | |
90e8e50f KM |
566 | }; |
567 | }; | |
568 | ||
569 | rcar_sound,dai { | |
570 | dai0 { | |
571 | playback = <&ssi5 &src5>; | |
572 | capture = <&ssi6>; | |
573 | }; | |
574 | dai1 { | |
575 | playback = <&ssi3>; | |
576 | }; | |
577 | dai2 { | |
578 | capture = <&ssi4>; | |
579 | }; | |
580 | dai3 { | |
581 | playback = <&ssi7>; | |
582 | }; | |
583 | dai4 { | |
584 | capture = <&ssi8>; | |
585 | }; | |
586 | }; | |
587 | }; | |
f3f17d32 | 588 | |
f1511a14 | 589 | ============================================= |
f3f17d32 | 590 | Example: simple sound card |
f1511a14 | 591 | ============================================= |
f3f17d32 KM |
592 | |
593 | rsnd_ak4643: sound { | |
594 | compatible = "simple-audio-card"; | |
595 | ||
596 | simple-audio-card,format = "left_j"; | |
597 | simple-audio-card,bitclock-master = <&sndcodec>; | |
598 | simple-audio-card,frame-master = <&sndcodec>; | |
599 | ||
600 | sndcpu: simple-audio-card,cpu { | |
601 | sound-dai = <&rcar_sound>; | |
602 | }; | |
603 | ||
604 | sndcodec: simple-audio-card,codec { | |
605 | sound-dai = <&ak4643>; | |
606 | clocks = <&audio_clock>; | |
607 | }; | |
608 | }; | |
609 | ||
610 | &rcar_sound { | |
611 | pinctrl-0 = <&sound_pins &sound_clk_pins>; | |
612 | pinctrl-names = "default"; | |
613 | ||
614 | /* Single DAI */ | |
615 | #sound-dai-cells = <0>; | |
616 | ||
617 | status = "okay"; | |
618 | ||
619 | rcar_sound,dai { | |
620 | dai0 { | |
621 | playback = <&ssi0 &src2 &dvc0>; | |
622 | capture = <&ssi1 &src3 &dvc1>; | |
623 | }; | |
624 | }; | |
625 | }; | |
626 | ||
627 | &ssi1 { | |
628 | shared-pin; | |
629 | }; | |
44bf5361 | 630 | |
f1511a14 | 631 | ============================================= |
44bf5361 | 632 | Example: simple sound card for TDM |
f1511a14 | 633 | ============================================= |
44bf5361 KM |
634 | |
635 | rsnd_tdm: sound { | |
636 | compatible = "simple-audio-card"; | |
637 | ||
638 | simple-audio-card,format = "left_j"; | |
639 | simple-audio-card,bitclock-master = <&sndcodec>; | |
640 | simple-audio-card,frame-master = <&sndcodec>; | |
641 | ||
642 | sndcpu: simple-audio-card,cpu { | |
643 | sound-dai = <&rcar_sound>; | |
644 | dai-tdm-slot-num = <6>; | |
645 | }; | |
646 | ||
647 | sndcodec: simple-audio-card,codec { | |
648 | sound-dai = <&xxx>; | |
649 | }; | |
650 | }; | |
b4c83b17 | 651 | |
f1511a14 | 652 | ============================================= |
b4c83b17 | 653 | Example: simple sound card for Multi channel |
f1511a14 | 654 | ============================================= |
b4c83b17 KM |
655 | |
656 | &rcar_sound { | |
657 | pinctrl-0 = <&sound_pins &sound_clk_pins>; | |
658 | pinctrl-names = "default"; | |
659 | ||
660 | /* Single DAI */ | |
661 | #sound-dai-cells = <0>; | |
662 | ||
663 | status = "okay"; | |
664 | ||
665 | rcar_sound,dai { | |
666 | dai0 { | |
667 | playback = <&ssi0 &ssi1 &ssi2 &src0 &dvc0>; | |
668 | }; | |
669 | }; | |
670 | }; |