xref: /OK3568_Linux_fs/kernel/Documentation/devicetree/bindings/sound/renesas,rsnd.txt (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593SmuzhiyunRenesas R-Car sound
2*4882a593Smuzhiyun
3*4882a593Smuzhiyun=============================================
4*4882a593Smuzhiyun* Modules
5*4882a593Smuzhiyun=============================================
6*4882a593Smuzhiyun
7*4882a593SmuzhiyunRenesas R-Car and RZ/G sound is constructed from below modules
8*4882a593Smuzhiyun(for Gen2 or later)
9*4882a593Smuzhiyun
10*4882a593Smuzhiyun SCU		: Sampling Rate Converter Unit
11*4882a593Smuzhiyun  - SRC		: Sampling Rate Converter
12*4882a593Smuzhiyun  - CMD
13*4882a593Smuzhiyun   - CTU	: Channel Transfer Unit
14*4882a593Smuzhiyun   - MIX	: Mixer
15*4882a593Smuzhiyun   - DVC	: Digital Volume and Mute Function
16*4882a593Smuzhiyun SSIU		: Serial Sound Interface Unit
17*4882a593Smuzhiyun SSI		: Serial Sound Interface
18*4882a593Smuzhiyun
19*4882a593SmuzhiyunSee detail of each module's channels, connection, limitation on datasheet
20*4882a593Smuzhiyun
21*4882a593Smuzhiyun=============================================
22*4882a593Smuzhiyun* Multi channel
23*4882a593Smuzhiyun=============================================
24*4882a593Smuzhiyun
25*4882a593SmuzhiyunMulti channel is supported by Multi-SSI, or TDM-SSI.
26*4882a593Smuzhiyun
27*4882a593Smuzhiyun Multi-SSI	: 6ch case, you can use stereo x 3 SSI
28*4882a593Smuzhiyun TDM-SSI	: 6ch case, you can use TDM
29*4882a593Smuzhiyun
30*4882a593Smuzhiyun=============================================
31*4882a593Smuzhiyun* Enable/Disable each modules
32*4882a593Smuzhiyun=============================================
33*4882a593Smuzhiyun
34*4882a593SmuzhiyunSee datasheet to check SRC/CTU/MIX/DVC connect-limitation.
35*4882a593SmuzhiyunDT controls enabling/disabling module.
36*4882a593Smuzhiyun${LINUX}/arch/arm/boot/dts/r8a7790-lager.dts can be good example.
37*4882a593SmuzhiyunThis is example of
38*4882a593Smuzhiyun
39*4882a593SmuzhiyunPlayback: [MEM] -> [SRC2] -> [DVC0] -> [SSIU0/SSI0] -> [codec]
40*4882a593SmuzhiyunCapture:  [MEM] <- [DVC1] <- [SRC3] <- [SSIU1/SSI1] <- [codec]
41*4882a593Smuzhiyun
42*4882a593Smuzhiyunsee "Example: simple sound card"
43*4882a593Smuzhiyun
44*4882a593SmuzhiyunYou can use below.
45*4882a593Smuzhiyun${LINUX}/arch/arm/boot/dts/r8a7790.dts can be good example.
46*4882a593Smuzhiyun
47*4882a593Smuzhiyun	&src0	&ctu00	&mix0	&dvc0	&ssi0
48*4882a593Smuzhiyun	&src1	&ctu01	&mix1	&dvc1	&ssi1
49*4882a593Smuzhiyun	&src2	&ctu02			&ssi2
50*4882a593Smuzhiyun	&src3	&ctu03			&ssi3
51*4882a593Smuzhiyun	&src4				&ssi4
52*4882a593Smuzhiyun	&src5	&ctu10			&ssi5
53*4882a593Smuzhiyun	&src6	&ctu11			&ssi6
54*4882a593Smuzhiyun	&src7	&ctu12			&ssi7
55*4882a593Smuzhiyun	&src8	&ctu13			&ssi8
56*4882a593Smuzhiyun	&src9				&ssi9
57*4882a593Smuzhiyun
58*4882a593Smuzhiyun=============================================
59*4882a593Smuzhiyun* SRC (Sampling Rate Converter)
60*4882a593Smuzhiyun=============================================
61*4882a593Smuzhiyun
62*4882a593Smuzhiyun [xx]Hz        [yy]Hz
63*4882a593Smuzhiyun ------> [SRC] ------>
64*4882a593Smuzhiyun
65*4882a593SmuzhiyunSRC can convert [xx]Hz to [yy]Hz. Then, it has below 2 modes
66*4882a593Smuzhiyun
67*4882a593Smuzhiyun Asynchronous mode:	input data / output data are based on different clocks.
68*4882a593Smuzhiyun			you can use this mode on Playback / Capture
69*4882a593Smuzhiyun Synchronous mode:	input data / output data are based on same clocks.
70*4882a593Smuzhiyun			This mode will be used if system doesn't have its input clock,
71*4882a593Smuzhiyun			for example digital TV case.
72*4882a593Smuzhiyun			you can use this mode on Playback
73*4882a593Smuzhiyun
74*4882a593Smuzhiyun------------------
75*4882a593Smuzhiyun**     Asynchronous mode
76*4882a593Smuzhiyun------------------
77*4882a593Smuzhiyun
78*4882a593SmuzhiyunYou need to use "simple-scu-audio-card" or "audio-graph-scu-card" for it.
79*4882a593Smuzhiyunsee "Example: simple sound card for Asynchronous mode"
80*4882a593Smuzhiyun
81*4882a593Smuzhiyun------------------
82*4882a593Smuzhiyun**     Synchronous mode
83*4882a593Smuzhiyun------------------
84*4882a593Smuzhiyun
85*4882a593Smuzhiyun	> amixer set "SRC Out Rate" on
86*4882a593Smuzhiyun	> aplay xxxx.wav
87*4882a593Smuzhiyun	> amixer set "SRC Out Rate" 48000
88*4882a593Smuzhiyun	> amixer set "SRC Out Rate" 44100
89*4882a593Smuzhiyun
90*4882a593Smuzhiyun=============================================
91*4882a593Smuzhiyun* CTU (Channel Transfer Unit)
92*4882a593Smuzhiyun=============================================
93*4882a593Smuzhiyun
94*4882a593Smuzhiyun [xx]ch        [yy]ch
95*4882a593Smuzhiyun ------> [CTU] -------->
96*4882a593Smuzhiyun
97*4882a593SmuzhiyunCTU can convert [xx]ch to [yy]ch, or exchange outputed channel.
98*4882a593SmuzhiyunCTU conversion needs matrix settings.
99*4882a593SmuzhiyunFor more detail information, see below
100*4882a593Smuzhiyun
101*4882a593Smuzhiyun	Renesas R-Car datasheet
102*4882a593Smuzhiyun	 - Sampling Rate Converter Unit (SCU)
103*4882a593Smuzhiyun	  - SCU Operation
104*4882a593Smuzhiyun	   - CMD Block
105*4882a593Smuzhiyun	    - Functional Blocks in CMD
106*4882a593Smuzhiyun
107*4882a593Smuzhiyun	Renesas R-Car datasheet
108*4882a593Smuzhiyun	 - Sampling Rate Converter Unit (SCU)
109*4882a593Smuzhiyun	  - Register Description
110*4882a593Smuzhiyun	   - CTUn Scale Value exx Register (CTUn_SVxxR)
111*4882a593Smuzhiyun
112*4882a593Smuzhiyun	${LINUX}/sound/soc/sh/rcar/ctu.c
113*4882a593Smuzhiyun	 - comment of header
114*4882a593Smuzhiyun
115*4882a593SmuzhiyunYou need to use "simple-scu-audio-card" or "audio-graph-scu-card" for it.
116*4882a593Smuzhiyunsee "Example: simple sound card for channel convert"
117*4882a593Smuzhiyun
118*4882a593SmuzhiyunEx) Exchange output channel
119*4882a593Smuzhiyun Input -> Output
120*4882a593Smuzhiyun  1ch  ->  0ch
121*4882a593Smuzhiyun  0ch  ->  1ch
122*4882a593Smuzhiyun
123*4882a593Smuzhiyun  example of using matrix
124*4882a593Smuzhiyun	output 0ch = (input 0ch x 0) + (input 1ch x 1)
125*4882a593Smuzhiyun	output 1ch = (input 0ch x 1) + (input 1ch x 0)
126*4882a593Smuzhiyun
127*4882a593Smuzhiyun	amixer set "CTU Reset" on
128*4882a593Smuzhiyun	amixer set "CTU Pass" 9,10
129*4882a593Smuzhiyun	amixer set "CTU SV0" 0,4194304
130*4882a593Smuzhiyun	amixer set "CTU SV1" 4194304,0
131*4882a593Smuzhiyun
132*4882a593Smuzhiyun example of changing connection
133*4882a593Smuzhiyun	amixer set "CTU Reset" on
134*4882a593Smuzhiyun	amixer set "CTU Pass" 2,1
135*4882a593Smuzhiyun
136*4882a593Smuzhiyun=============================================
137*4882a593Smuzhiyun* MIX (Mixer)
138*4882a593Smuzhiyun=============================================
139*4882a593Smuzhiyun
140*4882a593SmuzhiyunMIX merges 2 sounds path. You can see 2 sound interface on system,
141*4882a593Smuzhiyunand these sounds will be merged by MIX.
142*4882a593Smuzhiyun
143*4882a593Smuzhiyun	aplay -D plughw:0,0 xxxx.wav &
144*4882a593Smuzhiyun	aplay -D plughw:0,1 yyyy.wav
145*4882a593Smuzhiyun
146*4882a593SmuzhiyunYou need to use "simple-scu-audio-card" or "audio-graph-scu-card" for it.
147*4882a593SmuzhiyunEx)
148*4882a593Smuzhiyun	[MEM] -> [SRC1] -> [CTU02] -+-> [MIX0] -> [DVC0] -> [SSI0]
149*4882a593Smuzhiyun	                            |
150*4882a593Smuzhiyun	[MEM] -> [SRC2] -> [CTU03] -+
151*4882a593Smuzhiyun
152*4882a593Smuzhiyunsee "Example: simple sound card for MIXer"
153*4882a593Smuzhiyun
154*4882a593Smuzhiyun=============================================
155*4882a593Smuzhiyun* DVC (Digital Volume and Mute Function)
156*4882a593Smuzhiyun=============================================
157*4882a593Smuzhiyun
158*4882a593SmuzhiyunDVC controls Playback/Capture volume.
159*4882a593Smuzhiyun
160*4882a593SmuzhiyunPlayback Volume
161*4882a593Smuzhiyun	amixer set "DVC Out" 100%
162*4882a593Smuzhiyun
163*4882a593SmuzhiyunCapture Volume
164*4882a593Smuzhiyun	amixer set "DVC In" 100%
165*4882a593Smuzhiyun
166*4882a593SmuzhiyunPlayback Mute
167*4882a593Smuzhiyun	amixer set "DVC Out Mute" on
168*4882a593Smuzhiyun
169*4882a593SmuzhiyunCapture Mute
170*4882a593Smuzhiyun	amixer set "DVC In Mute" on
171*4882a593Smuzhiyun
172*4882a593SmuzhiyunVolume Ramp
173*4882a593Smuzhiyun	amixer set "DVC Out Ramp Up Rate"   "0.125 dB/64 steps"
174*4882a593Smuzhiyun	amixer set "DVC Out Ramp Down Rate" "0.125 dB/512 steps"
175*4882a593Smuzhiyun	amixer set "DVC Out Ramp" on
176*4882a593Smuzhiyun	aplay xxx.wav &
177*4882a593Smuzhiyun	amixer set "DVC Out"  80%  // Volume Down
178*4882a593Smuzhiyun	amixer set "DVC Out" 100%  // Volume Up
179*4882a593Smuzhiyun
180*4882a593Smuzhiyun=============================================
181*4882a593Smuzhiyun* SSIU (Serial Sound Interface Unit)
182*4882a593Smuzhiyun=============================================
183*4882a593Smuzhiyun
184*4882a593SmuzhiyunSSIU can avoid some under/over run error, because it has some buffer.
185*4882a593SmuzhiyunBut you can't use it if SSI was PIO mode.
186*4882a593SmuzhiyunIn DMA mode, you can select not to use SSIU by using "no-busif" via SSI.
187*4882a593Smuzhiyun
188*4882a593SmuzhiyunSSIU handles BUSIF which will be used for TDM Split mode.
189*4882a593SmuzhiyunThis driver is assuming that audio-graph card will be used.
190*4882a593Smuzhiyun
191*4882a593SmuzhiyunTDM Split mode merges 4 sounds. You can see 4 sound interface on system,
192*4882a593Smuzhiyunand these sounds will be merged SSIU/SSI.
193*4882a593Smuzhiyun
194*4882a593Smuzhiyun	aplay -D plughw:0,0 xxxx.wav &
195*4882a593Smuzhiyun	aplay -D plughw:0,1 xxxx.wav &
196*4882a593Smuzhiyun	aplay -D plughw:0,2 xxxx.wav &
197*4882a593Smuzhiyun	aplay -D plughw:0,3 xxxx.wav
198*4882a593Smuzhiyun
199*4882a593Smuzhiyun	          2ch                     8ch
200*4882a593Smuzhiyun	[MEM] -> [SSIU 30] -+-> [SSIU 3] --> [Codec]
201*4882a593Smuzhiyun	          2ch       |
202*4882a593Smuzhiyun	[MEM] -> [SSIU 31] -+
203*4882a593Smuzhiyun	          2ch       |
204*4882a593Smuzhiyun	[MEM] -> [SSIU 32] -+
205*4882a593Smuzhiyun	          2ch       |
206*4882a593Smuzhiyun	[MEM] -> [SSIU 33] -+
207*4882a593Smuzhiyun
208*4882a593Smuzhiyunsee "Example: simple sound card for TDM Split"
209*4882a593Smuzhiyun
210*4882a593Smuzhiyun=============================================
211*4882a593Smuzhiyun* SSI (Serial Sound Interface)
212*4882a593Smuzhiyun=============================================
213*4882a593Smuzhiyun
214*4882a593Smuzhiyun**  PIO mode
215*4882a593Smuzhiyun
216*4882a593SmuzhiyunYou can use PIO mode which is for connection check by using.
217*4882a593SmuzhiyunNote: The system will drop non-SSI modules in PIO mode
218*4882a593Smuzhiyuneven though if DT is selecting other modules.
219*4882a593Smuzhiyun
220*4882a593Smuzhiyun	&ssi0 {
221*4882a593Smuzhiyun		pio-transfer
222*4882a593Smuzhiyun	};
223*4882a593Smuzhiyun
224*4882a593Smuzhiyun** DMA mode without SSIU
225*4882a593Smuzhiyun
226*4882a593SmuzhiyunYou can use DMA without SSIU.
227*4882a593SmuzhiyunNote: under/over run, or noise are likely to occur
228*4882a593Smuzhiyun
229*4882a593Smuzhiyun	&ssi0 {
230*4882a593Smuzhiyun		no-busif;
231*4882a593Smuzhiyun	};
232*4882a593Smuzhiyun
233*4882a593Smuzhiyun** PIN sharing
234*4882a593Smuzhiyun
235*4882a593SmuzhiyunEach SSI can share WS pin. It is based on platform.
236*4882a593SmuzhiyunThis is example if SSI1 want to share WS pin with SSI0
237*4882a593Smuzhiyun
238*4882a593Smuzhiyun	&ssi1 {
239*4882a593Smuzhiyun		shared-pin;
240*4882a593Smuzhiyun	};
241*4882a593Smuzhiyun
242*4882a593Smuzhiyun** Multi-SSI
243*4882a593Smuzhiyun
244*4882a593SmuzhiyunYou can use Multi-SSI.
245*4882a593SmuzhiyunThis is example of SSI0/SSI1/SSI2 (= for 6ch)
246*4882a593Smuzhiyun
247*4882a593Smuzhiyunsee "Example: simple sound card for Multi channel"
248*4882a593Smuzhiyun
249*4882a593Smuzhiyun** TDM-SSI
250*4882a593Smuzhiyun
251*4882a593SmuzhiyunYou can use TDM with SSI.
252*4882a593SmuzhiyunThis is example of TDM 6ch.
253*4882a593SmuzhiyunDriver can automatically switches TDM <-> stereo mode in this case.
254*4882a593Smuzhiyun
255*4882a593Smuzhiyunsee "Example: simple sound card for TDM"
256*4882a593Smuzhiyun
257*4882a593Smuzhiyun=============================================
258*4882a593SmuzhiyunRequired properties:
259*4882a593Smuzhiyun=============================================
260*4882a593Smuzhiyun
261*4882a593Smuzhiyun- compatible			: "renesas,rcar_sound-<soctype>", fallbacks
262*4882a593Smuzhiyun				  "renesas,rcar_sound-gen1" if generation1, and
263*4882a593Smuzhiyun				  "renesas,rcar_sound-gen2" if generation2 (or RZ/G1)
264*4882a593Smuzhiyun				  "renesas,rcar_sound-gen3" if generation3 (or RZ/G2)
265*4882a593Smuzhiyun				  Examples with soctypes are:
266*4882a593Smuzhiyun				    - "renesas,rcar_sound-r8a7742" (RZ/G1H)
267*4882a593Smuzhiyun				    - "renesas,rcar_sound-r8a7743" (RZ/G1M)
268*4882a593Smuzhiyun				    - "renesas,rcar_sound-r8a7744" (RZ/G1N)
269*4882a593Smuzhiyun				    - "renesas,rcar_sound-r8a7745" (RZ/G1E)
270*4882a593Smuzhiyun				    - "renesas,rcar_sound-r8a77470" (RZ/G1C)
271*4882a593Smuzhiyun				    - "renesas,rcar_sound-r8a774a1" (RZ/G2M)
272*4882a593Smuzhiyun				    - "renesas,rcar_sound-r8a774b1" (RZ/G2N)
273*4882a593Smuzhiyun				    - "renesas,rcar_sound-r8a774c0" (RZ/G2E)
274*4882a593Smuzhiyun				    - "renesas,rcar_sound-r8a774e1" (RZ/G2H)
275*4882a593Smuzhiyun				    - "renesas,rcar_sound-r8a7778" (R-Car M1A)
276*4882a593Smuzhiyun				    - "renesas,rcar_sound-r8a7779" (R-Car H1)
277*4882a593Smuzhiyun				    - "renesas,rcar_sound-r8a7790" (R-Car H2)
278*4882a593Smuzhiyun				    - "renesas,rcar_sound-r8a7791" (R-Car M2-W)
279*4882a593Smuzhiyun				    - "renesas,rcar_sound-r8a7793" (R-Car M2-N)
280*4882a593Smuzhiyun				    - "renesas,rcar_sound-r8a7794" (R-Car E2)
281*4882a593Smuzhiyun				    - "renesas,rcar_sound-r8a7795" (R-Car H3)
282*4882a593Smuzhiyun				    - "renesas,rcar_sound-r8a7796" (R-Car M3-W)
283*4882a593Smuzhiyun				    - "renesas,rcar_sound-r8a77965" (R-Car M3-N)
284*4882a593Smuzhiyun				    - "renesas,rcar_sound-r8a77990" (R-Car E3)
285*4882a593Smuzhiyun				    - "renesas,rcar_sound-r8a77995" (R-Car D3)
286*4882a593Smuzhiyun- reg				: Should contain the register physical address.
287*4882a593Smuzhiyun				  required register is
288*4882a593Smuzhiyun				   SRU/ADG/SSI      if generation1
289*4882a593Smuzhiyun				   SRU/ADG/SSIU/SSI/AUDIO-DMAC-periperi if generation2/generation3
290*4882a593Smuzhiyun				   Select extended AUDIO-DMAC-periperi address if SoC has it,
291*4882a593Smuzhiyun				   otherwise select normal AUDIO-DMAC-periperi address.
292*4882a593Smuzhiyun- reg-names			: Should contain the register names.
293*4882a593Smuzhiyun				   scu/adg/ssi	if generation1
294*4882a593Smuzhiyun				   scu/adg/ssiu/ssi/audmapp if generation2/generation3
295*4882a593Smuzhiyun- rcar_sound,ssi		: Should contain SSI feature.
296*4882a593Smuzhiyun				  The number of SSI subnode should be same as HW.
297*4882a593Smuzhiyun				  see below for detail.
298*4882a593Smuzhiyun- rcar_sound,ssiu		: Should contain SSIU feature.
299*4882a593Smuzhiyun				  The number of SSIU subnode should be same as HW.
300*4882a593Smuzhiyun				  see below for detail.
301*4882a593Smuzhiyun- rcar_sound,src		: Should contain SRC feature.
302*4882a593Smuzhiyun				  The number of SRC subnode should be same as HW.
303*4882a593Smuzhiyun				  see below for detail.
304*4882a593Smuzhiyun- rcar_sound,ctu		: Should contain CTU feature.
305*4882a593Smuzhiyun				  The number of CTU subnode should be same as HW.
306*4882a593Smuzhiyun				  see below for detail.
307*4882a593Smuzhiyun- rcar_sound,mix		: Should contain MIX feature.
308*4882a593Smuzhiyun				  The number of MIX subnode should be same as HW.
309*4882a593Smuzhiyun				  see below for detail.
310*4882a593Smuzhiyun- rcar_sound,dvc		: Should contain DVC feature.
311*4882a593Smuzhiyun				  The number of DVC subnode should be same as HW.
312*4882a593Smuzhiyun				  see below for detail.
313*4882a593Smuzhiyun- rcar_sound,dai		: DAI contents.
314*4882a593Smuzhiyun				  The number of DAI subnode should be same as HW.
315*4882a593Smuzhiyun				  see below for detail.
316*4882a593Smuzhiyun- #sound-dai-cells		: it must be 0 if your system is using single DAI
317*4882a593Smuzhiyun				  it must be 1 if your system is using multi  DAI
318*4882a593Smuzhiyun- clocks			: References to SSI/SRC/MIX/CTU/DVC/AUDIO_CLK clocks.
319*4882a593Smuzhiyun- clock-names			: List of necessary clock names.
320*4882a593Smuzhiyun				  "ssi-all", "ssi.X", "src.X", "mix.X", "ctu.X",
321*4882a593Smuzhiyun				  "dvc.X", "clk_a", "clk_b", "clk_c", "clk_i"
322*4882a593Smuzhiyun
323*4882a593SmuzhiyunOptional properties:
324*4882a593Smuzhiyun- #clock-cells			: it must be 0 if your system has audio_clkout
325*4882a593Smuzhiyun				  it must be 1 if your system has audio_clkout0/1/2/3
326*4882a593Smuzhiyun- clock-frequency		: for all audio_clkout0/1/2/3
327*4882a593Smuzhiyun- clkout-lr-asynchronous	: boolean property. it indicates that audio_clkoutn
328*4882a593Smuzhiyun				  is asynchronizes with lr-clock.
329*4882a593Smuzhiyun- resets			: References to SSI resets.
330*4882a593Smuzhiyun- reset-names			: List of valid reset names.
331*4882a593Smuzhiyun				  "ssi-all", "ssi.X"
332*4882a593Smuzhiyun
333*4882a593SmuzhiyunSSI subnode properties:
334*4882a593Smuzhiyun- interrupts			: Should contain SSI interrupt for PIO transfer
335*4882a593Smuzhiyun- shared-pin			: if shared clock pin
336*4882a593Smuzhiyun- pio-transfer			: use PIO transfer mode
337*4882a593Smuzhiyun- no-busif			: BUSIF is not ussed when [mem -> SSI] via DMA case
338*4882a593Smuzhiyun- dma				: Should contain Audio DMAC entry
339*4882a593Smuzhiyun- dma-names			: SSI  case "rx"  (=playback), "tx"  (=capture)
340*4882a593Smuzhiyun				  Deprecated: see SSIU subnode properties
341*4882a593Smuzhiyun				  SSIU case "rxu" (=playback), "txu" (=capture)
342*4882a593Smuzhiyun
343*4882a593SmuzhiyunSSIU subnode properties:
344*4882a593Smuzhiyun- dma				: Should contain Audio DMAC entry
345*4882a593Smuzhiyun- dma-names			: "rx" (=playback), "tx" (=capture)
346*4882a593Smuzhiyun
347*4882a593SmuzhiyunSRC subnode properties:
348*4882a593Smuzhiyun- dma				: Should contain Audio DMAC entry
349*4882a593Smuzhiyun- dma-names			: "rx" (=playback), "tx" (=capture)
350*4882a593Smuzhiyun
351*4882a593SmuzhiyunDVC subnode properties:
352*4882a593Smuzhiyun- dma				: Should contain Audio DMAC entry
353*4882a593Smuzhiyun- dma-names			: "tx" (=playback/capture)
354*4882a593Smuzhiyun
355*4882a593SmuzhiyunDAI subnode properties:
356*4882a593Smuzhiyun- playback			: list of playback modules
357*4882a593Smuzhiyun- capture			: list of capture  modules
358*4882a593Smuzhiyun
359*4882a593Smuzhiyun
360*4882a593Smuzhiyun=============================================
361*4882a593SmuzhiyunExample:
362*4882a593Smuzhiyun=============================================
363*4882a593Smuzhiyun
364*4882a593Smuzhiyunrcar_sound: sound@ec500000 {
365*4882a593Smuzhiyun	#sound-dai-cells = <1>;
366*4882a593Smuzhiyun	compatible = "renesas,rcar_sound-r8a7791", "renesas,rcar_sound-gen2";
367*4882a593Smuzhiyun	reg =	<0 0xec500000 0 0x1000>, /* SCU */
368*4882a593Smuzhiyun		<0 0xec5a0000 0 0x100>,  /* ADG */
369*4882a593Smuzhiyun		<0 0xec540000 0 0x1000>, /* SSIU */
370*4882a593Smuzhiyun		<0 0xec541000 0 0x1280>, /* SSI */
371*4882a593Smuzhiyun		<0 0xec740000 0 0x200>;  /* Audio DMAC peri peri*/
372*4882a593Smuzhiyun	reg-names = "scu", "adg", "ssiu", "ssi", "audmapp";
373*4882a593Smuzhiyun
374*4882a593Smuzhiyun	clocks = <&mstp10_clks R8A7790_CLK_SSI_ALL>,
375*4882a593Smuzhiyun		<&mstp10_clks R8A7790_CLK_SSI9>, <&mstp10_clks R8A7790_CLK_SSI8>,
376*4882a593Smuzhiyun		<&mstp10_clks R8A7790_CLK_SSI7>, <&mstp10_clks R8A7790_CLK_SSI6>,
377*4882a593Smuzhiyun		<&mstp10_clks R8A7790_CLK_SSI5>, <&mstp10_clks R8A7790_CLK_SSI4>,
378*4882a593Smuzhiyun		<&mstp10_clks R8A7790_CLK_SSI3>, <&mstp10_clks R8A7790_CLK_SSI2>,
379*4882a593Smuzhiyun		<&mstp10_clks R8A7790_CLK_SSI1>, <&mstp10_clks R8A7790_CLK_SSI0>,
380*4882a593Smuzhiyun		<&mstp10_clks R8A7790_CLK_SCU_SRC9>, <&mstp10_clks R8A7790_CLK_SCU_SRC8>,
381*4882a593Smuzhiyun		<&mstp10_clks R8A7790_CLK_SCU_SRC7>, <&mstp10_clks R8A7790_CLK_SCU_SRC6>,
382*4882a593Smuzhiyun		<&mstp10_clks R8A7790_CLK_SCU_SRC5>, <&mstp10_clks R8A7790_CLK_SCU_SRC4>,
383*4882a593Smuzhiyun		<&mstp10_clks R8A7790_CLK_SCU_SRC3>, <&mstp10_clks R8A7790_CLK_SCU_SRC2>,
384*4882a593Smuzhiyun		<&mstp10_clks R8A7790_CLK_SCU_SRC1>, <&mstp10_clks R8A7790_CLK_SCU_SRC0>,
385*4882a593Smuzhiyun		<&mstp10_clks R8A7790_CLK_SCU_DVC0>, <&mstp10_clks R8A7790_CLK_SCU_DVC1>,
386*4882a593Smuzhiyun		<&audio_clk_a>, <&audio_clk_b>, <&audio_clk_c>, <&m2_clk>;
387*4882a593Smuzhiyun	clock-names = "ssi-all",
388*4882a593Smuzhiyun			"ssi.9", "ssi.8", "ssi.7", "ssi.6", "ssi.5",
389*4882a593Smuzhiyun			"ssi.4", "ssi.3", "ssi.2", "ssi.1", "ssi.0",
390*4882a593Smuzhiyun			"src.9", "src.8", "src.7", "src.6", "src.5",
391*4882a593Smuzhiyun			"src.4", "src.3", "src.2", "src.1", "src.0",
392*4882a593Smuzhiyun			"dvc.0", "dvc.1",
393*4882a593Smuzhiyun			"clk_a", "clk_b", "clk_c", "clk_i";
394*4882a593Smuzhiyun
395*4882a593Smuzhiyun	rcar_sound,dvc {
396*4882a593Smuzhiyun		dvc0: dvc-0 {
397*4882a593Smuzhiyun			dmas = <&audma0 0xbc>;
398*4882a593Smuzhiyun			dma-names = "tx";
399*4882a593Smuzhiyun		};
400*4882a593Smuzhiyun		dvc1: dvc-1 {
401*4882a593Smuzhiyun			dmas = <&audma0 0xbe>;
402*4882a593Smuzhiyun			dma-names = "tx";
403*4882a593Smuzhiyun		};
404*4882a593Smuzhiyun	};
405*4882a593Smuzhiyun
406*4882a593Smuzhiyun	rcar_sound,mix {
407*4882a593Smuzhiyun		mix0: mix-0 { };
408*4882a593Smuzhiyun		mix1: mix-1 { };
409*4882a593Smuzhiyun	};
410*4882a593Smuzhiyun
411*4882a593Smuzhiyun	rcar_sound,ctu {
412*4882a593Smuzhiyun		ctu00: ctu-0 { };
413*4882a593Smuzhiyun		ctu01: ctu-1 { };
414*4882a593Smuzhiyun		ctu02: ctu-2 { };
415*4882a593Smuzhiyun		ctu03: ctu-3 { };
416*4882a593Smuzhiyun		ctu10: ctu-4 { };
417*4882a593Smuzhiyun		ctu11: ctu-5 { };
418*4882a593Smuzhiyun		ctu12: ctu-6 { };
419*4882a593Smuzhiyun		ctu13: ctu-7 { };
420*4882a593Smuzhiyun	};
421*4882a593Smuzhiyun
422*4882a593Smuzhiyun	rcar_sound,src {
423*4882a593Smuzhiyun		src0: src-0 {
424*4882a593Smuzhiyun			interrupts = <0 352 IRQ_TYPE_LEVEL_HIGH>;
425*4882a593Smuzhiyun			dmas = <&audma0 0x85>, <&audma1 0x9a>;
426*4882a593Smuzhiyun			dma-names = "rx", "tx";
427*4882a593Smuzhiyun		};
428*4882a593Smuzhiyun		src1: src-1 {
429*4882a593Smuzhiyun			interrupts = <0 353 IRQ_TYPE_LEVEL_HIGH>;
430*4882a593Smuzhiyun			dmas = <&audma0 0x87>, <&audma1 0x9c>;
431*4882a593Smuzhiyun			dma-names = "rx", "tx";
432*4882a593Smuzhiyun		};
433*4882a593Smuzhiyun		src2: src-2 {
434*4882a593Smuzhiyun			interrupts = <0 354 IRQ_TYPE_LEVEL_HIGH>;
435*4882a593Smuzhiyun			dmas = <&audma0 0x89>, <&audma1 0x9e>;
436*4882a593Smuzhiyun			dma-names = "rx", "tx";
437*4882a593Smuzhiyun		};
438*4882a593Smuzhiyun		src3: src-3 {
439*4882a593Smuzhiyun			interrupts = <0 355 IRQ_TYPE_LEVEL_HIGH>;
440*4882a593Smuzhiyun			dmas = <&audma0 0x8b>, <&audma1 0xa0>;
441*4882a593Smuzhiyun			dma-names = "rx", "tx";
442*4882a593Smuzhiyun		};
443*4882a593Smuzhiyun		src4: src-4 {
444*4882a593Smuzhiyun			interrupts = <0 356 IRQ_TYPE_LEVEL_HIGH>;
445*4882a593Smuzhiyun			dmas = <&audma0 0x8d>, <&audma1 0xb0>;
446*4882a593Smuzhiyun			dma-names = "rx", "tx";
447*4882a593Smuzhiyun		};
448*4882a593Smuzhiyun		src5: src-5 {
449*4882a593Smuzhiyun			interrupts = <0 357 IRQ_TYPE_LEVEL_HIGH>;
450*4882a593Smuzhiyun			dmas = <&audma0 0x8f>, <&audma1 0xb2>;
451*4882a593Smuzhiyun			dma-names = "rx", "tx";
452*4882a593Smuzhiyun		};
453*4882a593Smuzhiyun		src6: src-6 {
454*4882a593Smuzhiyun			interrupts = <0 358 IRQ_TYPE_LEVEL_HIGH>;
455*4882a593Smuzhiyun			dmas = <&audma0 0x91>, <&audma1 0xb4>;
456*4882a593Smuzhiyun			dma-names = "rx", "tx";
457*4882a593Smuzhiyun		};
458*4882a593Smuzhiyun		src7: src-7 {
459*4882a593Smuzhiyun			interrupts = <0 359 IRQ_TYPE_LEVEL_HIGH>;
460*4882a593Smuzhiyun			dmas = <&audma0 0x93>, <&audma1 0xb6>;
461*4882a593Smuzhiyun			dma-names = "rx", "tx";
462*4882a593Smuzhiyun		};
463*4882a593Smuzhiyun		src8: src-8 {
464*4882a593Smuzhiyun			interrupts = <0 360 IRQ_TYPE_LEVEL_HIGH>;
465*4882a593Smuzhiyun			dmas = <&audma0 0x95>, <&audma1 0xb8>;
466*4882a593Smuzhiyun			dma-names = "rx", "tx";
467*4882a593Smuzhiyun		};
468*4882a593Smuzhiyun		src9: src-9 {
469*4882a593Smuzhiyun			interrupts = <0 361 IRQ_TYPE_LEVEL_HIGH>;
470*4882a593Smuzhiyun			dmas = <&audma0 0x97>, <&audma1 0xba>;
471*4882a593Smuzhiyun			dma-names = "rx", "tx";
472*4882a593Smuzhiyun		};
473*4882a593Smuzhiyun	};
474*4882a593Smuzhiyun
475*4882a593Smuzhiyun	rcar_sound,ssiu {
476*4882a593Smuzhiyun		ssiu00: ssiu-0 {
477*4882a593Smuzhiyun			dmas = <&audma0 0x15>, <&audma1 0x16>;
478*4882a593Smuzhiyun			dma-names = "rx", "tx";
479*4882a593Smuzhiyun		};
480*4882a593Smuzhiyun		ssiu01: ssiu-1 {
481*4882a593Smuzhiyun			dmas = <&audma0 0x35>, <&audma1 0x36>;
482*4882a593Smuzhiyun			dma-names = "rx", "tx";
483*4882a593Smuzhiyun		};
484*4882a593Smuzhiyun
485*4882a593Smuzhiyun		...
486*4882a593Smuzhiyun
487*4882a593Smuzhiyun		ssiu95: ssiu-49 {
488*4882a593Smuzhiyun			dmas = <&audma0 0xA5>, <&audma1 0xA6>;
489*4882a593Smuzhiyun			dma-names = "rx", "tx";
490*4882a593Smuzhiyun		};
491*4882a593Smuzhiyun		ssiu96: ssiu-50 {
492*4882a593Smuzhiyun			dmas = <&audma0 0xA7>, <&audma1 0xA8>;
493*4882a593Smuzhiyun			dma-names = "rx", "tx";
494*4882a593Smuzhiyun		};
495*4882a593Smuzhiyun		ssiu97: ssiu-51 {
496*4882a593Smuzhiyun			dmas = <&audma0 0xA9>, <&audma1 0xAA>;
497*4882a593Smuzhiyun			dma-names = "rx", "tx";
498*4882a593Smuzhiyun		};
499*4882a593Smuzhiyun	};
500*4882a593Smuzhiyun
501*4882a593Smuzhiyun	rcar_sound,ssi {
502*4882a593Smuzhiyun		ssi0: ssi-0 {
503*4882a593Smuzhiyun			interrupts = <0 370 IRQ_TYPE_LEVEL_HIGH>;
504*4882a593Smuzhiyun			dmas = <&audma0 0x01>, <&audma1 0x02>;
505*4882a593Smuzhiyun			dma-names = "rx", "tx";
506*4882a593Smuzhiyun		};
507*4882a593Smuzhiyun		ssi1: ssi-1 {
508*4882a593Smuzhiyun			interrupts = <0 371 IRQ_TYPE_LEVEL_HIGH>;
509*4882a593Smuzhiyun			dmas = <&audma0 0x03>, <&audma1 0x04>;
510*4882a593Smuzhiyun			dma-names = "rx", "tx";
511*4882a593Smuzhiyun		};
512*4882a593Smuzhiyun
513*4882a593Smuzhiyun		...
514*4882a593Smuzhiyun
515*4882a593Smuzhiyun		ssi8: ssi-8 {
516*4882a593Smuzhiyun			interrupts = <0 378 IRQ_TYPE_LEVEL_HIGH>;
517*4882a593Smuzhiyun			dmas = <&audma0 0x11>, <&audma1 0x12>;
518*4882a593Smuzhiyun			dma-names = "rx", "tx";
519*4882a593Smuzhiyun		};
520*4882a593Smuzhiyun		ssi9: ssi-9 {
521*4882a593Smuzhiyun			interrupts = <0 379 IRQ_TYPE_LEVEL_HIGH>;
522*4882a593Smuzhiyun			dmas = <&audma0 0x13>, <&audma1 0x14>;
523*4882a593Smuzhiyun			dma-names = "rx", "tx";
524*4882a593Smuzhiyun		};
525*4882a593Smuzhiyun	};
526*4882a593Smuzhiyun
527*4882a593Smuzhiyun	rcar_sound,dai {
528*4882a593Smuzhiyun		dai0 {
529*4882a593Smuzhiyun			playback = <&ssi5 &src5>;
530*4882a593Smuzhiyun			capture  = <&ssi6>;
531*4882a593Smuzhiyun		};
532*4882a593Smuzhiyun		dai1 {
533*4882a593Smuzhiyun			playback = <&ssi3>;
534*4882a593Smuzhiyun		};
535*4882a593Smuzhiyun		dai2 {
536*4882a593Smuzhiyun			capture  = <&ssi4>;
537*4882a593Smuzhiyun		};
538*4882a593Smuzhiyun		dai3 {
539*4882a593Smuzhiyun			playback = <&ssi7>;
540*4882a593Smuzhiyun		};
541*4882a593Smuzhiyun		dai4 {
542*4882a593Smuzhiyun			capture  = <&ssi8>;
543*4882a593Smuzhiyun		};
544*4882a593Smuzhiyun	};
545*4882a593Smuzhiyun};
546*4882a593Smuzhiyun
547*4882a593Smuzhiyun=============================================
548*4882a593SmuzhiyunExample: simple sound card
549*4882a593Smuzhiyun=============================================
550*4882a593Smuzhiyun
551*4882a593Smuzhiyun	rsnd_ak4643: sound {
552*4882a593Smuzhiyun		compatible = "simple-audio-card";
553*4882a593Smuzhiyun
554*4882a593Smuzhiyun		simple-audio-card,format = "left_j";
555*4882a593Smuzhiyun		simple-audio-card,bitclock-master = <&sndcodec>;
556*4882a593Smuzhiyun		simple-audio-card,frame-master = <&sndcodec>;
557*4882a593Smuzhiyun
558*4882a593Smuzhiyun		sndcpu: simple-audio-card,cpu {
559*4882a593Smuzhiyun			sound-dai = <&rcar_sound>;
560*4882a593Smuzhiyun		};
561*4882a593Smuzhiyun
562*4882a593Smuzhiyun		sndcodec: simple-audio-card,codec {
563*4882a593Smuzhiyun			sound-dai = <&ak4643>;
564*4882a593Smuzhiyun			clocks = <&audio_clock>;
565*4882a593Smuzhiyun		};
566*4882a593Smuzhiyun	};
567*4882a593Smuzhiyun
568*4882a593Smuzhiyun&rcar_sound {
569*4882a593Smuzhiyun	pinctrl-0 = <&sound_pins &sound_clk_pins>;
570*4882a593Smuzhiyun	pinctrl-names = "default";
571*4882a593Smuzhiyun
572*4882a593Smuzhiyun	/* Single DAI */
573*4882a593Smuzhiyun	#sound-dai-cells = <0>;
574*4882a593Smuzhiyun
575*4882a593Smuzhiyun
576*4882a593Smuzhiyun	rcar_sound,dai {
577*4882a593Smuzhiyun		dai0 {
578*4882a593Smuzhiyun			playback = <&ssi0 &src2 &dvc0>;
579*4882a593Smuzhiyun			capture  = <&ssi1 &src3 &dvc1>;
580*4882a593Smuzhiyun		};
581*4882a593Smuzhiyun	};
582*4882a593Smuzhiyun};
583*4882a593Smuzhiyun
584*4882a593Smuzhiyun&ssi1 {
585*4882a593Smuzhiyun	shared-pin;
586*4882a593Smuzhiyun};
587*4882a593Smuzhiyun
588*4882a593Smuzhiyun=============================================
589*4882a593SmuzhiyunExample: simple sound card for Asynchronous mode
590*4882a593Smuzhiyun=============================================
591*4882a593Smuzhiyun
592*4882a593Smuzhiyunsound {
593*4882a593Smuzhiyun	compatible = "simple-scu-audio-card";
594*4882a593Smuzhiyun	...
595*4882a593Smuzhiyun	/*
596*4882a593Smuzhiyun	 * SRC Asynchronous mode setting
597*4882a593Smuzhiyun	 * Playback:
598*4882a593Smuzhiyun	 * All input data will be converted to 48kHz
599*4882a593Smuzhiyun	 * Capture:
600*4882a593Smuzhiyun	 * Inputed 48kHz data will be converted to
601*4882a593Smuzhiyun	 * system specified Hz
602*4882a593Smuzhiyun	 */
603*4882a593Smuzhiyun	simple-audio-card,convert-rate = <48000>;
604*4882a593Smuzhiyun	...
605*4882a593Smuzhiyun	simple-audio-card,cpu {
606*4882a593Smuzhiyun		sound-dai = <&rcar_sound>;
607*4882a593Smuzhiyun	};
608*4882a593Smuzhiyun	simple-audio-card,codec {
609*4882a593Smuzhiyun		...
610*4882a593Smuzhiyun	};
611*4882a593Smuzhiyun};
612*4882a593Smuzhiyun
613*4882a593Smuzhiyun=============================================
614*4882a593SmuzhiyunExample: simple sound card for channel convert
615*4882a593Smuzhiyun=============================================
616*4882a593Smuzhiyun
617*4882a593Smuzhiyunsound {
618*4882a593Smuzhiyun	compatible = "simple-scu-audio-card";
619*4882a593Smuzhiyun	...
620*4882a593Smuzhiyun	/*
621*4882a593Smuzhiyun	 * CTU setting
622*4882a593Smuzhiyun	 * All input data will be converted to 2ch
623*4882a593Smuzhiyun	 * as output data
624*4882a593Smuzhiyun	 */
625*4882a593Smuzhiyun	simple-audio-card,convert-channels = <2>;
626*4882a593Smuzhiyun	...
627*4882a593Smuzhiyun	simple-audio-card,cpu {
628*4882a593Smuzhiyun		sound-dai = <&rcar_sound>;
629*4882a593Smuzhiyun	};
630*4882a593Smuzhiyun	simple-audio-card,codec {
631*4882a593Smuzhiyun		...
632*4882a593Smuzhiyun	};
633*4882a593Smuzhiyun};
634*4882a593Smuzhiyun
635*4882a593Smuzhiyun=============================================
636*4882a593SmuzhiyunExample: simple sound card for MIXer
637*4882a593Smuzhiyun=============================================
638*4882a593Smuzhiyun
639*4882a593Smuzhiyunsound {
640*4882a593Smuzhiyun	compatible = "simple-scu-audio-card";
641*4882a593Smuzhiyun	...
642*4882a593Smuzhiyun	simple-audio-card,cpu@0 {
643*4882a593Smuzhiyun		sound-dai = <&rcar_sound 0>;
644*4882a593Smuzhiyun	};
645*4882a593Smuzhiyun	simple-audio-card,cpu@1 {
646*4882a593Smuzhiyun		sound-dai = <&rcar_sound 1>;
647*4882a593Smuzhiyun	};
648*4882a593Smuzhiyun	simple-audio-card,codec {
649*4882a593Smuzhiyun		...
650*4882a593Smuzhiyun	};
651*4882a593Smuzhiyun};
652*4882a593Smuzhiyun
653*4882a593Smuzhiyun&rcar_sound {
654*4882a593Smuzhiyun	...
655*4882a593Smuzhiyun	rcar_sound,dai {
656*4882a593Smuzhiyun		dai0 {
657*4882a593Smuzhiyun			playback = <&src1 &ctu02 &mix0 &dvc0 &ssi0>;
658*4882a593Smuzhiyun		};
659*4882a593Smuzhiyun		dai1 {
660*4882a593Smuzhiyun			playback = <&src2 &ctu03 &mix0 &dvc0 &ssi0>;
661*4882a593Smuzhiyun		};
662*4882a593Smuzhiyun	};
663*4882a593Smuzhiyun};
664*4882a593Smuzhiyun
665*4882a593Smuzhiyun=============================================
666*4882a593SmuzhiyunExample: simple sound card for TDM
667*4882a593Smuzhiyun=============================================
668*4882a593Smuzhiyun
669*4882a593Smuzhiyunrsnd_tdm: sound {
670*4882a593Smuzhiyun	compatible = "simple-audio-card";
671*4882a593Smuzhiyun
672*4882a593Smuzhiyun	simple-audio-card,format = "left_j";
673*4882a593Smuzhiyun	simple-audio-card,bitclock-master = <&sndcodec>;
674*4882a593Smuzhiyun	simple-audio-card,frame-master = <&sndcodec>;
675*4882a593Smuzhiyun
676*4882a593Smuzhiyun	sndcpu: simple-audio-card,cpu {
677*4882a593Smuzhiyun		sound-dai = <&rcar_sound>;
678*4882a593Smuzhiyun		dai-tdm-slot-num = <6>;
679*4882a593Smuzhiyun	};
680*4882a593Smuzhiyun
681*4882a593Smuzhiyun	sndcodec: simple-audio-card,codec {
682*4882a593Smuzhiyun		sound-dai = <&xxx>;
683*4882a593Smuzhiyun	};
684*4882a593Smuzhiyun};
685*4882a593Smuzhiyun
686*4882a593Smuzhiyun=============================================
687*4882a593SmuzhiyunExample: simple sound card for TDM Split
688*4882a593Smuzhiyun=============================================
689*4882a593Smuzhiyun
690*4882a593Smuzhiyunsound_card: sound {
691*4882a593Smuzhiyun	compatible = "audio-graph-scu-card";
692*4882a593Smuzhiyun	prefix = "xxxx";
693*4882a593Smuzhiyun	routing = "xxxx Playback", "DAI0 Playback",
694*4882a593Smuzhiyun		  "xxxx Playback", "DAI1 Playback",
695*4882a593Smuzhiyun		  "xxxx Playback", "DAI2 Playback",
696*4882a593Smuzhiyun		  "xxxx Playback", "DAI3 Playback";
697*4882a593Smuzhiyun	convert-channels = <8>; /* TDM Split */
698*4882a593Smuzhiyun
699*4882a593Smuzhiyun	dais = <&rsnd_port0     /* playback ch1/ch2 */
700*4882a593Smuzhiyun		&rsnd_port1     /* playback ch3/ch4 */
701*4882a593Smuzhiyun		&rsnd_port2     /* playback ch5/ch6 */
702*4882a593Smuzhiyun		&rsnd_port3     /* playback ch7/ch8 */
703*4882a593Smuzhiyun		>;
704*4882a593Smuzhiyun};
705*4882a593Smuzhiyun
706*4882a593Smuzhiyunaudio-codec {
707*4882a593Smuzhiyun	...
708*4882a593Smuzhiyun	port {
709*4882a593Smuzhiyun		codec_0: endpoint@1 {
710*4882a593Smuzhiyun			remote-endpoint = <&rsnd_ep0>;
711*4882a593Smuzhiyun		};
712*4882a593Smuzhiyun		codec_1: endpoint@2 {
713*4882a593Smuzhiyun			remote-endpoint = <&rsnd_ep1>;
714*4882a593Smuzhiyun		};
715*4882a593Smuzhiyun		codec_2: endpoint@3 {
716*4882a593Smuzhiyun			remote-endpoint = <&rsnd_ep2>;
717*4882a593Smuzhiyun		};
718*4882a593Smuzhiyun		codec_3: endpoint@4 {
719*4882a593Smuzhiyun			remote-endpoint = <&rsnd_ep3>;
720*4882a593Smuzhiyun		};
721*4882a593Smuzhiyun	};
722*4882a593Smuzhiyun};
723*4882a593Smuzhiyun
724*4882a593Smuzhiyun&rcar_sound {
725*4882a593Smuzhiyun	...
726*4882a593Smuzhiyun	ports {
727*4882a593Smuzhiyun		rsnd_port0: port@0 {
728*4882a593Smuzhiyun			rsnd_ep0: endpoint {
729*4882a593Smuzhiyun				remote-endpoint = <&codec_0>;
730*4882a593Smuzhiyun				...
731*4882a593Smuzhiyun				playback = <&ssiu30 &ssi3>;
732*4882a593Smuzhiyun			};
733*4882a593Smuzhiyun		};
734*4882a593Smuzhiyun		rsnd_port1: port@1 {
735*4882a593Smuzhiyun			rsnd_ep1: endpoint {
736*4882a593Smuzhiyun				remote-endpoint = <&codec_1>;
737*4882a593Smuzhiyun				...
738*4882a593Smuzhiyun				playback = <&ssiu31 &ssi3>;
739*4882a593Smuzhiyun			};
740*4882a593Smuzhiyun		};
741*4882a593Smuzhiyun		rsnd_port2: port@2 {
742*4882a593Smuzhiyun			rsnd_ep2: endpoint {
743*4882a593Smuzhiyun				remote-endpoint = <&codec_2>;
744*4882a593Smuzhiyun				...
745*4882a593Smuzhiyun				playback = <&ssiu32 &ssi3>;
746*4882a593Smuzhiyun			};
747*4882a593Smuzhiyun		};
748*4882a593Smuzhiyun		rsnd_port3: port@3 {
749*4882a593Smuzhiyun			rsnd_ep3: endpoint {
750*4882a593Smuzhiyun				remote-endpoint = <&codec_3>;
751*4882a593Smuzhiyun				...
752*4882a593Smuzhiyun				playback = <&ssiu33 &ssi3>;
753*4882a593Smuzhiyun			};
754*4882a593Smuzhiyun		};
755*4882a593Smuzhiyun	};
756*4882a593Smuzhiyun};
757*4882a593Smuzhiyun
758*4882a593Smuzhiyun=============================================
759*4882a593SmuzhiyunExample: simple sound card for Multi channel
760*4882a593Smuzhiyun=============================================
761*4882a593Smuzhiyun
762*4882a593Smuzhiyun&rcar_sound {
763*4882a593Smuzhiyun	pinctrl-0 = <&sound_pins &sound_clk_pins>;
764*4882a593Smuzhiyun	pinctrl-names = "default";
765*4882a593Smuzhiyun
766*4882a593Smuzhiyun	/* Single DAI */
767*4882a593Smuzhiyun	#sound-dai-cells = <0>;
768*4882a593Smuzhiyun
769*4882a593Smuzhiyun
770*4882a593Smuzhiyun	rcar_sound,dai {
771*4882a593Smuzhiyun		dai0 {
772*4882a593Smuzhiyun			playback = <&ssi0 &ssi1 &ssi2 &src0 &dvc0>;
773*4882a593Smuzhiyun		};
774*4882a593Smuzhiyun	};
775*4882a593Smuzhiyun};
776