forked from ~ljy/RK356X_SDK_RELEASE

hc
2023-12-11 6778948f9de86c3cfaf36725a7c87dcff9ba247f
kernel/Documentation/devicetree/bindings/sound/renesas,rsnd.txt
....@@ -39,15 +39,7 @@
3939 Playback: [MEM] -> [SRC2] -> [DVC0] -> [SSIU0/SSI0] -> [codec]
4040 Capture: [MEM] <- [DVC1] <- [SRC3] <- [SSIU1/SSI1] <- [codec]
4141
42
- &rcar_sound {
43
- ...
44
- rcar_sound,dai {
45
- dai0 {
46
- playback = <&ssi0 &src2 &dvc0>;
47
- capture = <&ssi1 &src3 &dvc1>;
48
- };
49
- };
50
- };
42
+see "Example: simple sound card"
5143
5244 You can use below.
5345 ${LINUX}/arch/arm/boot/dts/r8a7790.dts can be good example.
....@@ -83,29 +75,8 @@
8375 ** Asynchronous mode
8476 ------------------
8577
86
-You need to use "simple-scu-audio-card" sound card for it.
87
-example)
88
-
89
- sound {
90
- compatible = "simple-scu-audio-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
- simple-audio-card,convert-rate = <48000>;
101
- ...
102
- simple-audio-card,cpu {
103
- sound-dai = <&rcar_sound>;
104
- };
105
- simple-audio-card,codec {
106
- ...
107
- };
108
- };
78
+You need to use "simple-scu-audio-card" or "audio-graph-scu-card" for it.
79
+see "Example: simple sound card for Asynchronous mode"
10980
11081 ------------------
11182 ** Synchronous mode
....@@ -141,26 +112,8 @@
141112 ${LINUX}/sound/soc/sh/rcar/ctu.c
142113 - comment of header
143114
144
-You need to use "simple-scu-audio-card" sound card for it.
145
-example)
146
-
147
- sound {
148
- compatible = "simple-scu-audio-card";
149
- ...
150
- /*
151
- * CTU setting
152
- * All input data will be converted to 2ch
153
- * as output data
154
- */
155
- simple-audio-card,convert-channels = <2>;
156
- ...
157
- simple-audio-card,cpu {
158
- sound-dai = <&rcar_sound>;
159
- };
160
- simple-audio-card,codec {
161
- ...
162
- };
163
- };
115
+You need to use "simple-scu-audio-card" or "audio-graph-scu-card" for it.
116
+see "Example: simple sound card for channel convert"
164117
165118 Ex) Exchange output channel
166119 Input -> Output
....@@ -190,42 +143,13 @@
190143 aplay -D plughw:0,0 xxxx.wav &
191144 aplay -D plughw:0,1 yyyy.wav
192145
193
-You need to use "simple-scu-audio-card" sound card for it.
146
+You need to use "simple-scu-audio-card" or "audio-graph-scu-card" for it.
194147 Ex)
195148 [MEM] -> [SRC1] -> [CTU02] -+-> [MIX0] -> [DVC0] -> [SSI0]
196149 |
197150 [MEM] -> [SRC2] -> [CTU03] -+
198151
199
- sound {
200
- #address-cells = <1>;
201
- #size-cells = <0>;
202
-
203
- compatible = "simple-scu-audio-card";
204
- ...
205
- simple-audio-card,cpu@0 {
206
- reg = <0>;
207
- sound-dai = <&rcar_sound 0>;
208
- };
209
- simple-audio-card,cpu@1 {
210
- reg = <1>;
211
- sound-dai = <&rcar_sound 1>;
212
- };
213
- simple-audio-card,codec {
214
- ...
215
- };
216
- };
217
-
218
- &rcar_sound {
219
- ...
220
- rcar_sound,dai {
221
- dai0 {
222
- playback = <&src1 &ctu02 &mix0 &dvc0 &ssi0>;
223
- };
224
- dai1 {
225
- playback = <&src2 &ctu03 &mix0 &dvc0 &ssi0>;
226
- };
227
- };
228
- };
152
+see "Example: simple sound card for MIXer"
229153
230154 =============================================
231155 * DVC (Digital Volume and Mute Function)
....@@ -257,15 +181,31 @@
257181 * SSIU (Serial Sound Interface Unit)
258182 =============================================
259183
260
-There is no DT settings for SSIU, because SSIU will be automatically
261
-selected via SSI.
262184 SSIU can avoid some under/over run error, because it has some buffer.
263185 But you can't use it if SSI was PIO mode.
264
-In DMA mode, you can select not to use SSIU by using "no-busif" on DT.
186
+In DMA mode, you can select not to use SSIU by using "no-busif" via SSI.
265187
266
- &ssi0 {
267
- no-busif;
268
- };
188
+SSIU handles BUSIF which will be used for TDM Split mode.
189
+This driver is assuming that audio-graph card will be used.
190
+
191
+TDM Split mode merges 4 sounds. You can see 4 sound interface on system,
192
+and these sounds will be merged SSIU/SSI.
193
+
194
+ aplay -D plughw:0,0 xxxx.wav &
195
+ aplay -D plughw:0,1 xxxx.wav &
196
+ aplay -D plughw:0,2 xxxx.wav &
197
+ aplay -D plughw:0,3 xxxx.wav
198
+
199
+ 2ch 8ch
200
+ [MEM] -> [SSIU 30] -+-> [SSIU 3] --> [Codec]
201
+ 2ch |
202
+ [MEM] -> [SSIU 31] -+
203
+ 2ch |
204
+ [MEM] -> [SSIU 32] -+
205
+ 2ch |
206
+ [MEM] -> [SSIU 33] -+
207
+
208
+see "Example: simple sound card for TDM Split"
269209
270210 =============================================
271211 * SSI (Serial Sound Interface)
....@@ -304,14 +244,7 @@
304244 You can use Multi-SSI.
305245 This is example of SSI0/SSI1/SSI2 (= for 6ch)
306246
307
- &rcar_sound {
308
- ...
309
- rcar_sound,dai {
310
- dai0 {
311
- playback = <&ssi0 &ssi1 &ssi2 &src0 &dvc0>;
312
- };
313
- };
314
- };
247
+see "Example: simple sound card for Multi channel"
315248
316249 ** TDM-SSI
317250
....@@ -319,19 +252,7 @@
319252 This is example of TDM 6ch.
320253 Driver can automatically switches TDM <-> stereo mode in this case.
321254
322
- rsnd_tdm: sound {
323
- compatible = "simple-audio-card";
324
- ...
325
- simple-audio-card,cpu {
326
- /* system can use TDM 6ch */
327
- dai-tdm-slot-num = <6>;
328
- sound-dai = <&rcar_sound>;
329
- };
330
- simple-audio-card,codec {
331
- ...
332
- };
333
- };
334
-
255
+see "Example: simple sound card for TDM"
335256
336257 =============================================
337258 Required properties:
....@@ -340,10 +261,17 @@
340261 - compatible : "renesas,rcar_sound-<soctype>", fallbacks
341262 "renesas,rcar_sound-gen1" if generation1, and
342263 "renesas,rcar_sound-gen2" if generation2 (or RZ/G1)
343
- "renesas,rcar_sound-gen3" if generation3
264
+ "renesas,rcar_sound-gen3" if generation3 (or RZ/G2)
344265 Examples with soctypes are:
266
+ - "renesas,rcar_sound-r8a7742" (RZ/G1H)
345267 - "renesas,rcar_sound-r8a7743" (RZ/G1M)
268
+ - "renesas,rcar_sound-r8a7744" (RZ/G1N)
346269 - "renesas,rcar_sound-r8a7745" (RZ/G1E)
270
+ - "renesas,rcar_sound-r8a77470" (RZ/G1C)
271
+ - "renesas,rcar_sound-r8a774a1" (RZ/G2M)
272
+ - "renesas,rcar_sound-r8a774b1" (RZ/G2N)
273
+ - "renesas,rcar_sound-r8a774c0" (RZ/G2E)
274
+ - "renesas,rcar_sound-r8a774e1" (RZ/G2H)
347275 - "renesas,rcar_sound-r8a7778" (R-Car M1A)
348276 - "renesas,rcar_sound-r8a7779" (R-Car H1)
349277 - "renesas,rcar_sound-r8a7790" (R-Car H2)
....@@ -353,12 +281,22 @@
353281 - "renesas,rcar_sound-r8a7795" (R-Car H3)
354282 - "renesas,rcar_sound-r8a7796" (R-Car M3-W)
355283 - "renesas,rcar_sound-r8a77965" (R-Car M3-N)
284
+ - "renesas,rcar_sound-r8a77990" (R-Car E3)
285
+ - "renesas,rcar_sound-r8a77995" (R-Car D3)
356286 - reg : Should contain the register physical address.
357287 required register is
358288 SRU/ADG/SSI if generation1
359
- SRU/ADG/SSIU/SSI if generation2
289
+ SRU/ADG/SSIU/SSI/AUDIO-DMAC-periperi if generation2/generation3
290
+ Select extended AUDIO-DMAC-periperi address if SoC has it,
291
+ otherwise select normal AUDIO-DMAC-periperi address.
292
+- reg-names : Should contain the register names.
293
+ scu/adg/ssi if generation1
294
+ scu/adg/ssiu/ssi/audmapp if generation2/generation3
360295 - rcar_sound,ssi : Should contain SSI feature.
361296 The number of SSI subnode should be same as HW.
297
+ see below for detail.
298
+- rcar_sound,ssiu : Should contain SSIU feature.
299
+ The number of SSIU subnode should be same as HW.
362300 see below for detail.
363301 - rcar_sound,src : Should contain SRC feature.
364302 The number of SRC subnode should be same as HW.
....@@ -399,7 +337,12 @@
399337 - no-busif : BUSIF is not ussed when [mem -> SSI] via DMA case
400338 - dma : Should contain Audio DMAC entry
401339 - dma-names : SSI case "rx" (=playback), "tx" (=capture)
340
+ Deprecated: see SSIU subnode properties
402341 SSIU case "rxu" (=playback), "txu" (=capture)
342
+
343
+SSIU subnode properties:
344
+- dma : Should contain Audio DMAC entry
345
+- dma-names : "rx" (=playback), "tx" (=capture)
403346
404347 SRC subnode properties:
405348 - dma : Should contain Audio DMAC entry
....@@ -529,56 +472,55 @@
529472 };
530473 };
531474
475
+ rcar_sound,ssiu {
476
+ ssiu00: ssiu-0 {
477
+ dmas = <&audma0 0x15>, <&audma1 0x16>;
478
+ dma-names = "rx", "tx";
479
+ };
480
+ ssiu01: ssiu-1 {
481
+ dmas = <&audma0 0x35>, <&audma1 0x36>;
482
+ dma-names = "rx", "tx";
483
+ };
484
+
485
+ ...
486
+
487
+ ssiu95: ssiu-49 {
488
+ dmas = <&audma0 0xA5>, <&audma1 0xA6>;
489
+ dma-names = "rx", "tx";
490
+ };
491
+ ssiu96: ssiu-50 {
492
+ dmas = <&audma0 0xA7>, <&audma1 0xA8>;
493
+ dma-names = "rx", "tx";
494
+ };
495
+ ssiu97: ssiu-51 {
496
+ dmas = <&audma0 0xA9>, <&audma1 0xAA>;
497
+ dma-names = "rx", "tx";
498
+ };
499
+ };
500
+
532501 rcar_sound,ssi {
533502 ssi0: ssi-0 {
534503 interrupts = <0 370 IRQ_TYPE_LEVEL_HIGH>;
535
- dmas = <&audma0 0x01>, <&audma1 0x02>, <&audma0 0x15>, <&audma1 0x16>;
536
- dma-names = "rx", "tx", "rxu", "txu";
504
+ dmas = <&audma0 0x01>, <&audma1 0x02>;
505
+ dma-names = "rx", "tx";
537506 };
538507 ssi1: ssi-1 {
539508 interrupts = <0 371 IRQ_TYPE_LEVEL_HIGH>;
540
- dmas = <&audma0 0x03>, <&audma1 0x04>, <&audma0 0x49>, <&audma1 0x4a>;
541
- dma-names = "rx", "tx", "rxu", "txu";
509
+ dmas = <&audma0 0x03>, <&audma1 0x04>;
510
+ dma-names = "rx", "tx";
542511 };
543
- ssi2: ssi-2 {
544
- interrupts = <0 372 IRQ_TYPE_LEVEL_HIGH>;
545
- dmas = <&audma0 0x05>, <&audma1 0x06>, <&audma0 0x63>, <&audma1 0x64>;
546
- dma-names = "rx", "tx", "rxu", "txu";
547
- };
548
- ssi3: ssi-3 {
549
- interrupts = <0 373 IRQ_TYPE_LEVEL_HIGH>;
550
- dmas = <&audma0 0x07>, <&audma1 0x08>, <&audma0 0x6f>, <&audma1 0x70>;
551
- dma-names = "rx", "tx", "rxu", "txu";
552
- };
553
- ssi4: ssi-4 {
554
- interrupts = <0 374 IRQ_TYPE_LEVEL_HIGH>;
555
- dmas = <&audma0 0x09>, <&audma1 0x0a>, <&audma0 0x71>, <&audma1 0x72>;
556
- dma-names = "rx", "tx", "rxu", "txu";
557
- };
558
- ssi5: ssi-5 {
559
- interrupts = <0 375 IRQ_TYPE_LEVEL_HIGH>;
560
- dmas = <&audma0 0x0b>, <&audma1 0x0c>, <&audma0 0x73>, <&audma1 0x74>;
561
- dma-names = "rx", "tx", "rxu", "txu";
562
- };
563
- ssi6: ssi-6 {
564
- interrupts = <0 376 IRQ_TYPE_LEVEL_HIGH>;
565
- dmas = <&audma0 0x0d>, <&audma1 0x0e>, <&audma0 0x75>, <&audma1 0x76>;
566
- dma-names = "rx", "tx", "rxu", "txu";
567
- };
568
- ssi7: ssi-7 {
569
- interrupts = <0 377 IRQ_TYPE_LEVEL_HIGH>;
570
- dmas = <&audma0 0x0f>, <&audma1 0x10>, <&audma0 0x79>, <&audma1 0x7a>;
571
- dma-names = "rx", "tx", "rxu", "txu";
572
- };
512
+
513
+ ...
514
+
573515 ssi8: ssi-8 {
574516 interrupts = <0 378 IRQ_TYPE_LEVEL_HIGH>;
575
- dmas = <&audma0 0x11>, <&audma1 0x12>, <&audma0 0x7b>, <&audma1 0x7c>;
576
- dma-names = "rx", "tx", "rxu", "txu";
517
+ dmas = <&audma0 0x11>, <&audma1 0x12>;
518
+ dma-names = "rx", "tx";
577519 };
578520 ssi9: ssi-9 {
579521 interrupts = <0 379 IRQ_TYPE_LEVEL_HIGH>;
580
- dmas = <&audma0 0x13>, <&audma1 0x14>, <&audma0 0x7d>, <&audma1 0x7e>;
581
- dma-names = "rx", "tx", "rxu", "txu";
522
+ dmas = <&audma0 0x13>, <&audma1 0x14>;
523
+ dma-names = "rx", "tx";
582524 };
583525 };
584526
....@@ -644,25 +586,174 @@
644586 };
645587
646588 =============================================
589
+Example: simple sound card for Asynchronous mode
590
+=============================================
591
+
592
+sound {
593
+ compatible = "simple-scu-audio-card";
594
+ ...
595
+ /*
596
+ * SRC Asynchronous mode setting
597
+ * Playback:
598
+ * All input data will be converted to 48kHz
599
+ * Capture:
600
+ * Inputed 48kHz data will be converted to
601
+ * system specified Hz
602
+ */
603
+ simple-audio-card,convert-rate = <48000>;
604
+ ...
605
+ simple-audio-card,cpu {
606
+ sound-dai = <&rcar_sound>;
607
+ };
608
+ simple-audio-card,codec {
609
+ ...
610
+ };
611
+};
612
+
613
+=============================================
614
+Example: simple sound card for channel convert
615
+=============================================
616
+
617
+sound {
618
+ compatible = "simple-scu-audio-card";
619
+ ...
620
+ /*
621
+ * CTU setting
622
+ * All input data will be converted to 2ch
623
+ * as output data
624
+ */
625
+ simple-audio-card,convert-channels = <2>;
626
+ ...
627
+ simple-audio-card,cpu {
628
+ sound-dai = <&rcar_sound>;
629
+ };
630
+ simple-audio-card,codec {
631
+ ...
632
+ };
633
+};
634
+
635
+=============================================
636
+Example: simple sound card for MIXer
637
+=============================================
638
+
639
+sound {
640
+ compatible = "simple-scu-audio-card";
641
+ ...
642
+ simple-audio-card,cpu@0 {
643
+ sound-dai = <&rcar_sound 0>;
644
+ };
645
+ simple-audio-card,cpu@1 {
646
+ sound-dai = <&rcar_sound 1>;
647
+ };
648
+ simple-audio-card,codec {
649
+ ...
650
+ };
651
+};
652
+
653
+&rcar_sound {
654
+ ...
655
+ rcar_sound,dai {
656
+ dai0 {
657
+ playback = <&src1 &ctu02 &mix0 &dvc0 &ssi0>;
658
+ };
659
+ dai1 {
660
+ playback = <&src2 &ctu03 &mix0 &dvc0 &ssi0>;
661
+ };
662
+ };
663
+};
664
+
665
+=============================================
647666 Example: simple sound card for TDM
648667 =============================================
649668
650
- rsnd_tdm: sound {
651
- compatible = "simple-audio-card";
669
+rsnd_tdm: sound {
670
+ compatible = "simple-audio-card";
652671
653
- simple-audio-card,format = "left_j";
654
- simple-audio-card,bitclock-master = <&sndcodec>;
655
- simple-audio-card,frame-master = <&sndcodec>;
672
+ simple-audio-card,format = "left_j";
673
+ simple-audio-card,bitclock-master = <&sndcodec>;
674
+ simple-audio-card,frame-master = <&sndcodec>;
656675
657
- sndcpu: simple-audio-card,cpu {
658
- sound-dai = <&rcar_sound>;
659
- dai-tdm-slot-num = <6>;
676
+ sndcpu: simple-audio-card,cpu {
677
+ sound-dai = <&rcar_sound>;
678
+ dai-tdm-slot-num = <6>;
679
+ };
680
+
681
+ sndcodec: simple-audio-card,codec {
682
+ sound-dai = <&xxx>;
683
+ };
684
+};
685
+
686
+=============================================
687
+Example: simple sound card for TDM Split
688
+=============================================
689
+
690
+sound_card: sound {
691
+ compatible = "audio-graph-scu-card";
692
+ prefix = "xxxx";
693
+ routing = "xxxx Playback", "DAI0 Playback",
694
+ "xxxx Playback", "DAI1 Playback",
695
+ "xxxx Playback", "DAI2 Playback",
696
+ "xxxx Playback", "DAI3 Playback";
697
+ convert-channels = <8>; /* TDM Split */
698
+
699
+ dais = <&rsnd_port0 /* playback ch1/ch2 */
700
+ &rsnd_port1 /* playback ch3/ch4 */
701
+ &rsnd_port2 /* playback ch5/ch6 */
702
+ &rsnd_port3 /* playback ch7/ch8 */
703
+ >;
704
+};
705
+
706
+audio-codec {
707
+ ...
708
+ port {
709
+ codec_0: endpoint@1 {
710
+ remote-endpoint = <&rsnd_ep0>;
660711 };
661
-
662
- sndcodec: simple-audio-card,codec {
663
- sound-dai = <&xxx>;
712
+ codec_1: endpoint@2 {
713
+ remote-endpoint = <&rsnd_ep1>;
714
+ };
715
+ codec_2: endpoint@3 {
716
+ remote-endpoint = <&rsnd_ep2>;
717
+ };
718
+ codec_3: endpoint@4 {
719
+ remote-endpoint = <&rsnd_ep3>;
664720 };
665721 };
722
+};
723
+
724
+&rcar_sound {
725
+ ...
726
+ ports {
727
+ rsnd_port0: port@0 {
728
+ rsnd_ep0: endpoint {
729
+ remote-endpoint = <&codec_0>;
730
+ ...
731
+ playback = <&ssiu30 &ssi3>;
732
+ };
733
+ };
734
+ rsnd_port1: port@1 {
735
+ rsnd_ep1: endpoint {
736
+ remote-endpoint = <&codec_1>;
737
+ ...
738
+ playback = <&ssiu31 &ssi3>;
739
+ };
740
+ };
741
+ rsnd_port2: port@2 {
742
+ rsnd_ep2: endpoint {
743
+ remote-endpoint = <&codec_2>;
744
+ ...
745
+ playback = <&ssiu32 &ssi3>;
746
+ };
747
+ };
748
+ rsnd_port3: port@3 {
749
+ rsnd_ep3: endpoint {
750
+ remote-endpoint = <&codec_3>;
751
+ ...
752
+ playback = <&ssiu33 &ssi3>;
753
+ };
754
+ };
755
+ };
756
+};
666757
667758 =============================================
668759 Example: simple sound card for Multi channel