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 9747aab533SBjorn 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 112*94c0a8a1SLad Prabhakar ${LINUX}/sound/soc/renesas/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