190e8e50fSKuninori MorimotoRenesas R-Car sound
290e8e50fSKuninori Morimoto
3f1511a14SKuninori Morimoto=============================================
4f1511a14SKuninori Morimoto* Modules
5f1511a14SKuninori Morimoto=============================================
6f1511a14SKuninori Morimoto
7b0a858a4SBiju DasRenesas R-Car and RZ/G sound is constructed from below modules
8f1511a14SKuninori Morimoto(for Gen2 or later)
9f1511a14SKuninori Morimoto
10f1511a14SKuninori Morimoto SCU		: Sampling Rate Converter Unit
11f1511a14SKuninori Morimoto  - SRC		: Sampling Rate Converter
12f1511a14SKuninori Morimoto  - CMD
13f1511a14SKuninori Morimoto   - CTU	: Channel Transfer Unit
14f1511a14SKuninori Morimoto   - MIX	: Mixer
15f1511a14SKuninori Morimoto   - DVC	: Digital Volume and Mute Function
16f1511a14SKuninori Morimoto SSIU		: Serial Sound Interface Unit
17f1511a14SKuninori Morimoto SSI		: Serial Sound Interface
18f1511a14SKuninori Morimoto
19f1511a14SKuninori MorimotoSee detail of each module's channels, connection, limitation on datasheet
20f1511a14SKuninori Morimoto
21f1511a14SKuninori Morimoto=============================================
22f1511a14SKuninori Morimoto* Multi channel
23f1511a14SKuninori Morimoto=============================================
24f1511a14SKuninori Morimoto
25f1511a14SKuninori MorimotoMulti channel is supported by Multi-SSI, or TDM-SSI.
26f1511a14SKuninori Morimoto
27f1511a14SKuninori Morimoto Multi-SSI	: 6ch case, you can use stereo x 3 SSI
28f1511a14SKuninori Morimoto TDM-SSI	: 6ch case, you can use TDM
29f1511a14SKuninori Morimoto
30f1511a14SKuninori Morimoto=============================================
31f1511a14SKuninori Morimoto* Enable/Disable each modules
32f1511a14SKuninori Morimoto=============================================
33f1511a14SKuninori Morimoto
34f1511a14SKuninori MorimotoSee datasheet to check SRC/CTU/MIX/DVC connect-limitation.
35f1511a14SKuninori MorimotoDT controls enabling/disabling module.
36f1511a14SKuninori Morimoto${LINUX}/arch/arm/boot/dts/r8a7790-lager.dts can be good example.
37f1511a14SKuninori MorimotoThis is example of
38f1511a14SKuninori Morimoto
39f1511a14SKuninori MorimotoPlayback: [MEM] -> [SRC2] -> [DVC0] -> [SSIU0/SSI0] -> [codec]
40f1511a14SKuninori MorimotoCapture:  [MEM] <- [DVC1] <- [SRC3] <- [SSIU1/SSI1] <- [codec]
41f1511a14SKuninori Morimoto
42bd7ff187SKuninori Morimotosee "Example: simple sound card"
43f1511a14SKuninori Morimoto
44f1511a14SKuninori MorimotoYou can use below.
45f1511a14SKuninori Morimoto${LINUX}/arch/arm/boot/dts/r8a7790.dts can be good example.
46f1511a14SKuninori Morimoto
47f1511a14SKuninori Morimoto	&src0	&ctu00	&mix0	&dvc0	&ssi0
48f1511a14SKuninori Morimoto	&src1	&ctu01	&mix1	&dvc1	&ssi1
49f1511a14SKuninori Morimoto	&src2	&ctu02			&ssi2
50f1511a14SKuninori Morimoto	&src3	&ctu03			&ssi3
51f1511a14SKuninori Morimoto	&src4				&ssi4
52f1511a14SKuninori Morimoto	&src5	&ctu10			&ssi5
53f1511a14SKuninori Morimoto	&src6	&ctu11			&ssi6
54f1511a14SKuninori Morimoto	&src7	&ctu12			&ssi7
55f1511a14SKuninori Morimoto	&src8	&ctu13			&ssi8
56f1511a14SKuninori Morimoto	&src9				&ssi9
57f1511a14SKuninori Morimoto
58f1511a14SKuninori Morimoto=============================================
59f1511a14SKuninori Morimoto* SRC (Sampling Rate Converter)
60f1511a14SKuninori Morimoto=============================================
61f1511a14SKuninori Morimoto
62f1511a14SKuninori Morimoto [xx]Hz        [yy]Hz
63f1511a14SKuninori Morimoto ------> [SRC] ------>
64f1511a14SKuninori Morimoto
65f1511a14SKuninori MorimotoSRC can convert [xx]Hz to [yy]Hz. Then, it has below 2 modes
66f1511a14SKuninori Morimoto
67f1511a14SKuninori Morimoto Asynchronous mode:	input data / output data are based on different clocks.
68f1511a14SKuninori Morimoto			you can use this mode on Playback / Capture
69f1511a14SKuninori Morimoto Synchronous mode:	input data / output data are based on same clocks.
70f1511a14SKuninori Morimoto			This mode will be used if system doesn't have its input clock,
71f1511a14SKuninori Morimoto			for example digital TV case.
72f1511a14SKuninori Morimoto			you can use this mode on Playback
73f1511a14SKuninori Morimoto
74f1511a14SKuninori Morimoto------------------
75f1511a14SKuninori Morimoto**     Asynchronous mode
76f1511a14SKuninori Morimoto------------------
77f1511a14SKuninori Morimoto
78bd7ff187SKuninori MorimotoYou need to use "simple-scu-audio-card" or "audio-graph-scu-card" for it.
79bd7ff187SKuninori Morimotosee "Example: simple sound card for Asynchronous mode"
80f1511a14SKuninori Morimoto
81f1511a14SKuninori Morimoto------------------
82f1511a14SKuninori Morimoto**     Synchronous mode
83f1511a14SKuninori Morimoto------------------
84f1511a14SKuninori Morimoto
85f1511a14SKuninori Morimoto	> amixer set "SRC Out Rate" on
86f1511a14SKuninori Morimoto	> aplay xxxx.wav
87f1511a14SKuninori Morimoto	> amixer set "SRC Out Rate" 48000
88f1511a14SKuninori Morimoto	> amixer set "SRC Out Rate" 44100
89f1511a14SKuninori Morimoto
90f1511a14SKuninori Morimoto=============================================
91f1511a14SKuninori Morimoto* CTU (Channel Transfer Unit)
92f1511a14SKuninori Morimoto=============================================
93f1511a14SKuninori Morimoto
94f1511a14SKuninori Morimoto [xx]ch        [yy]ch
95f1511a14SKuninori Morimoto ------> [CTU] -------->
96f1511a14SKuninori Morimoto
97*47aab533SBjorn HelgaasCTU can convert [xx]ch to [yy]ch, or exchange outputted channel.
98f1511a14SKuninori MorimotoCTU conversion needs matrix settings.
99f1511a14SKuninori MorimotoFor more detail information, see below
100f1511a14SKuninori Morimoto
101f1511a14SKuninori Morimoto	Renesas R-Car datasheet
102f1511a14SKuninori Morimoto	 - Sampling Rate Converter Unit (SCU)
103f1511a14SKuninori Morimoto	  - SCU Operation
104f1511a14SKuninori Morimoto	   - CMD Block
105f1511a14SKuninori Morimoto	    - Functional Blocks in CMD
106f1511a14SKuninori Morimoto
107f1511a14SKuninori Morimoto	Renesas R-Car datasheet
108f1511a14SKuninori Morimoto	 - Sampling Rate Converter Unit (SCU)
109f1511a14SKuninori Morimoto	  - Register Description
110f1511a14SKuninori Morimoto	   - CTUn Scale Value exx Register (CTUn_SVxxR)
111f1511a14SKuninori Morimoto
112f1511a14SKuninori Morimoto	${LINUX}/sound/soc/sh/rcar/ctu.c
113f1511a14SKuninori Morimoto	 - comment of header
114f1511a14SKuninori Morimoto
115bd7ff187SKuninori MorimotoYou need to use "simple-scu-audio-card" or "audio-graph-scu-card" for it.
116bd7ff187SKuninori Morimotosee "Example: simple sound card for channel convert"
117f1511a14SKuninori Morimoto
118f1511a14SKuninori MorimotoEx) Exchange output channel
119f1511a14SKuninori Morimoto Input -> Output
120f1511a14SKuninori Morimoto  1ch  ->  0ch
121f1511a14SKuninori Morimoto  0ch  ->  1ch
122f1511a14SKuninori Morimoto
123f1511a14SKuninori Morimoto  example of using matrix
124f1511a14SKuninori Morimoto	output 0ch = (input 0ch x 0) + (input 1ch x 1)
125f1511a14SKuninori Morimoto	output 1ch = (input 0ch x 1) + (input 1ch x 0)
126f1511a14SKuninori Morimoto
127f1511a14SKuninori Morimoto	amixer set "CTU Reset" on
128f1511a14SKuninori Morimoto	amixer set "CTU Pass" 9,10
129f1511a14SKuninori Morimoto	amixer set "CTU SV0" 0,4194304
130f1511a14SKuninori Morimoto	amixer set "CTU SV1" 4194304,0
131f1511a14SKuninori Morimoto
132f1511a14SKuninori Morimoto example of changing connection
133f1511a14SKuninori Morimoto	amixer set "CTU Reset" on
134f1511a14SKuninori Morimoto	amixer set "CTU Pass" 2,1
135f1511a14SKuninori Morimoto
136f1511a14SKuninori Morimoto=============================================
137f1511a14SKuninori Morimoto* MIX (Mixer)
138f1511a14SKuninori Morimoto=============================================
139f1511a14SKuninori Morimoto
140f1511a14SKuninori MorimotoMIX merges 2 sounds path. You can see 2 sound interface on system,
141f1511a14SKuninori Morimotoand these sounds will be merged by MIX.
142f1511a14SKuninori Morimoto
143f1511a14SKuninori Morimoto	aplay -D plughw:0,0 xxxx.wav &
144f1511a14SKuninori Morimoto	aplay -D plughw:0,1 yyyy.wav
145f1511a14SKuninori Morimoto
146bd7ff187SKuninori MorimotoYou need to use "simple-scu-audio-card" or "audio-graph-scu-card" for it.
147f1511a14SKuninori MorimotoEx)
148f1511a14SKuninori Morimoto	[MEM] -> [SRC1] -> [CTU02] -+-> [MIX0] -> [DVC0] -> [SSI0]
149f1511a14SKuninori Morimoto	                            |
150f1511a14SKuninori Morimoto	[MEM] -> [SRC2] -> [CTU03] -+
151f1511a14SKuninori Morimoto
152bd7ff187SKuninori Morimotosee "Example: simple sound card for MIXer"
153f1511a14SKuninori Morimoto
154f1511a14SKuninori Morimoto=============================================
155f1511a14SKuninori Morimoto* DVC (Digital Volume and Mute Function)
156f1511a14SKuninori Morimoto=============================================
157f1511a14SKuninori Morimoto
158f1511a14SKuninori MorimotoDVC controls Playback/Capture volume.
159f1511a14SKuninori Morimoto
160f1511a14SKuninori MorimotoPlayback Volume
161f1511a14SKuninori Morimoto	amixer set "DVC Out" 100%
162f1511a14SKuninori Morimoto
163f1511a14SKuninori MorimotoCapture Volume
164f1511a14SKuninori Morimoto	amixer set "DVC In" 100%
165f1511a14SKuninori Morimoto
166f1511a14SKuninori MorimotoPlayback Mute
167f1511a14SKuninori Morimoto	amixer set "DVC Out Mute" on
168f1511a14SKuninori Morimoto
169f1511a14SKuninori MorimotoCapture Mute
170f1511a14SKuninori Morimoto	amixer set "DVC In Mute" on
171f1511a14SKuninori Morimoto
172f1511a14SKuninori MorimotoVolume Ramp
173f1511a14SKuninori Morimoto	amixer set "DVC Out Ramp Up Rate"   "0.125 dB/64 steps"
174f1511a14SKuninori Morimoto	amixer set "DVC Out Ramp Down Rate" "0.125 dB/512 steps"
175f1511a14SKuninori Morimoto	amixer set "DVC Out Ramp" on
176f1511a14SKuninori Morimoto	aplay xxx.wav &
177f1511a14SKuninori Morimoto	amixer set "DVC Out"  80%  // Volume Down
178f1511a14SKuninori Morimoto	amixer set "DVC Out" 100%  // Volume Up
179f1511a14SKuninori Morimoto
180f1511a14SKuninori Morimoto=============================================
181f1511a14SKuninori Morimoto* SSIU (Serial Sound Interface Unit)
182f1511a14SKuninori Morimoto=============================================
183f1511a14SKuninori Morimoto
184f1511a14SKuninori MorimotoSSIU can avoid some under/over run error, because it has some buffer.
185f1511a14SKuninori MorimotoBut you can't use it if SSI was PIO mode.
186da48a6ebSKuninori MorimotoIn DMA mode, you can select not to use SSIU by using "no-busif" via SSI.
187f1511a14SKuninori Morimoto
188da48a6ebSKuninori MorimotoSSIU handles BUSIF which will be used for TDM Split mode.
189da48a6ebSKuninori MorimotoThis driver is assuming that audio-graph card will be used.
190f1511a14SKuninori Morimoto
191cf704dc8SKuninori MorimotoTDM Split mode merges 4 sounds. You can see 4 sound interface on system,
192cf704dc8SKuninori Morimotoand these sounds will be merged SSIU/SSI.
193cf704dc8SKuninori Morimoto
194cf704dc8SKuninori Morimoto	aplay -D plughw:0,0 xxxx.wav &
195cf704dc8SKuninori Morimoto	aplay -D plughw:0,1 xxxx.wav &
196cf704dc8SKuninori Morimoto	aplay -D plughw:0,2 xxxx.wav &
197cf704dc8SKuninori Morimoto	aplay -D plughw:0,3 xxxx.wav
198cf704dc8SKuninori Morimoto
199cf704dc8SKuninori Morimoto	          2ch                     8ch
200cf704dc8SKuninori Morimoto	[MEM] -> [SSIU 30] -+-> [SSIU 3] --> [Codec]
201cf704dc8SKuninori Morimoto	          2ch       |
202cf704dc8SKuninori Morimoto	[MEM] -> [SSIU 31] -+
203cf704dc8SKuninori Morimoto	          2ch       |
204cf704dc8SKuninori Morimoto	[MEM] -> [SSIU 32] -+
205cf704dc8SKuninori Morimoto	          2ch       |
206cf704dc8SKuninori Morimoto	[MEM] -> [SSIU 33] -+
207cf704dc8SKuninori Morimoto
208cf704dc8SKuninori Morimotosee "Example: simple sound card for TDM Split"
209cf704dc8SKuninori Morimoto
210f1511a14SKuninori Morimoto=============================================
211f1511a14SKuninori Morimoto* SSI (Serial Sound Interface)
212f1511a14SKuninori Morimoto=============================================
213f1511a14SKuninori Morimoto
214f1511a14SKuninori Morimoto**  PIO mode
215f1511a14SKuninori Morimoto
216f1511a14SKuninori MorimotoYou can use PIO mode which is for connection check by using.
217f1511a14SKuninori MorimotoNote: The system will drop non-SSI modules in PIO mode
218f1511a14SKuninori Morimotoeven though if DT is selecting other modules.
219f1511a14SKuninori Morimoto
220f1511a14SKuninori Morimoto	&ssi0 {
221f1511a14SKuninori Morimoto		pio-transfer
222f1511a14SKuninori Morimoto	};
223f1511a14SKuninori Morimoto
224f1511a14SKuninori Morimoto** DMA mode without SSIU
225f1511a14SKuninori Morimoto
226f1511a14SKuninori MorimotoYou can use DMA without SSIU.
227f1511a14SKuninori MorimotoNote: under/over run, or noise are likely to occur
228f1511a14SKuninori Morimoto
229f1511a14SKuninori Morimoto	&ssi0 {
230f1511a14SKuninori Morimoto		no-busif;
231f1511a14SKuninori Morimoto	};
232f1511a14SKuninori Morimoto
233f1511a14SKuninori Morimoto** PIN sharing
234f1511a14SKuninori Morimoto
235f1511a14SKuninori MorimotoEach SSI can share WS pin. It is based on platform.
236f1511a14SKuninori MorimotoThis is example if SSI1 want to share WS pin with SSI0
237f1511a14SKuninori Morimoto
238f1511a14SKuninori Morimoto	&ssi1 {
239f1511a14SKuninori Morimoto		shared-pin;
240f1511a14SKuninori Morimoto	};
241f1511a14SKuninori Morimoto
242f1511a14SKuninori Morimoto** Multi-SSI
243f1511a14SKuninori Morimoto
244f1511a14SKuninori MorimotoYou can use Multi-SSI.
245f1511a14SKuninori MorimotoThis is example of SSI0/SSI1/SSI2 (= for 6ch)
246f1511a14SKuninori Morimoto
247bd7ff187SKuninori Morimotosee "Example: simple sound card for Multi channel"
248f1511a14SKuninori Morimoto
249f1511a14SKuninori Morimoto** TDM-SSI
250f1511a14SKuninori Morimoto
251f1511a14SKuninori MorimotoYou can use TDM with SSI.
252f1511a14SKuninori MorimotoThis is example of TDM 6ch.
253f1511a14SKuninori MorimotoDriver can automatically switches TDM <-> stereo mode in this case.
254f1511a14SKuninori Morimoto
255bd7ff187SKuninori Morimotosee "Example: simple sound card for TDM"
256