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