diff options
| author | Takashi Iwai <tiwai@suse.de> | 2016-11-11 17:34:57 +0100 | 
|---|---|---|
| committer | Takashi Iwai <tiwai@suse.de> | 2016-11-11 17:34:57 +0100 | 
| commit | 76228a2b541daebcc8f6d5d7dd65bdea90d173f1 (patch) | |
| tree | f1df9b7b63b39282d52cafc5988513853ce465e9 | |
| parent | 40433cd34e280bd1a56f54a3898e86863814c824 (diff) | |
| parent | 452a256898e7ca88115aa02d3851e67994ce3e19 (diff) | |
Merge branch 'topic/doc' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound into topic/restize-docs
| -rw-r--r-- | Documentation/sound/alsa/soc/codec_to_codec.txt | 103 | 
1 files changed, 103 insertions, 0 deletions
| diff --git a/Documentation/sound/alsa/soc/codec_to_codec.txt b/Documentation/sound/alsa/soc/codec_to_codec.txt new file mode 100644 index 000000000000..704a6483652c --- /dev/null +++ b/Documentation/sound/alsa/soc/codec_to_codec.txt @@ -0,0 +1,103 @@ +Creating codec to codec dai link for ALSA dapm +=================================================== + +Mostly the flow of audio is always from CPU to codec so your system +will look as below: + + ---------          --------- +|         |  dai   |         | +    CPU    ------->    codec +|         |        |         | + ---------          --------- + +In case your system looks as below: +                     --------- +                    |         | +                      codec-2 +                    |         | +                     --------- +                         | +                       dai-2 +                         | + ----------          --------- +|          |  dai-1 |         | +    CPU     ------->  codec-1 +|          |        |         | + ----------          --------- +                         | +                       dai-3 +                         | +                     --------- +                    |         | +                      codec-3 +                    |         | +                     --------- + +Suppose codec-2 is a bluetooth chip and codec-3 is connected to +a speaker and you have a below scenario: +codec-2 will receive the audio data and the user wants to play that +audio through codec-3 without involving the CPU.This +aforementioned case is the ideal case when codec to codec +connection should be used. + +Your dai_link should appear as below in your machine +file: + +/* + * this pcm stream only supports 24 bit, 2 channel and + * 48k sampling rate. + */ +static const struct snd_soc_pcm_stream dsp_codec_params = { +        .formats = SNDRV_PCM_FMTBIT_S24_LE, +        .rate_min = 48000, +        .rate_max = 48000, +        .channels_min = 2, +        .channels_max = 2, +}; + +{ +    .name = "CPU-DSP", +    .stream_name = "CPU-DSP", +    .cpu_dai_name = "samsung-i2s.0", +    .codec_name = "codec-2, +    .codec_dai_name = "codec-2-dai_name", +    .platform_name = "samsung-i2s.0", +    .dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF +            | SND_SOC_DAIFMT_CBM_CFM, +    .ignore_suspend = 1, +    .params = &dsp_codec_params, +}, +{ +    .name = "DSP-CODEC", +    .stream_name = "DSP-CODEC", +    .cpu_dai_name = "wm0010-sdi2", +    .codec_name = "codec-3, +    .codec_dai_name = "codec-3-dai_name", +    .dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF +            | SND_SOC_DAIFMT_CBM_CFM, +    .ignore_suspend = 1, +    .params = &dsp_codec_params, +}, + +Above code snippet is motivated from sound/soc/samsung/speyside.c. + +Note the "params" callback which lets the dapm know that this +dai_link is a codec to codec connection. + +In dapm core a route is created between cpu_dai playback widget +and codec_dai capture widget for playback path and vice-versa is +true for capture path. In order for this aforementioned route to get +triggered, DAPM needs to find a valid endpoint which could be either +a sink or source widget corresponding to playback and capture path +respectively. + +In order to trigger this dai_link widget, a thin codec driver for +the speaker amp can be created as demonstrated in wm8727.c file, it +sets appropriate constraints for the device even if it needs no control. + +Make sure to name your corresponding cpu and codec playback and capture +dai names ending with "Playback" and "Capture" respectively as dapm core +will link and power those dais based on the name. + +Note that in current device tree there is no way to mark a dai_link +as codec to codec. However, it may change in future. | 
