Adjust refcounts for FE Dai links in SOC compress framework
Change-Id: I3d894fc13e381eb066b3faed0fc76c31493523af
Signed-off-by: Haynes Mathew George <hgeorge@codeaurora.org>
Signed-off-by: Krishnankutty Kolathappilly <kkolat@codeaurora.org>
diff --git a/sound/soc/soc-compress.c b/sound/soc/soc-compress.c
index 4b54ad6..58b8399 100644
--- a/sound/soc/soc-compress.c
+++ b/sound/soc/soc-compress.c
@@ -83,6 +83,10 @@
struct snd_soc_platform *platform = fe->platform;
struct snd_soc_dpcm_params *dpcm;
struct snd_soc_dapm_widget_list *list;
+
+ struct snd_soc_dai *cpu_dai = fe->cpu_dai;
+ struct snd_soc_dai *codec_dai = fe->codec_dai;
+
int stream;
int ret = 0;
@@ -137,6 +141,19 @@
fe->dpcm[stream].state = SND_SOC_DPCM_STATE_OPEN;
fe->dpcm[stream].runtime_update = SND_SOC_DPCM_UPDATE_NO;
+
+ if (cstream->direction == SND_COMPRESS_PLAYBACK) {
+ cpu_dai->playback_active++;
+ codec_dai->playback_active++;
+ } else {
+ cpu_dai->capture_active++;
+ codec_dai->capture_active++;
+ }
+
+ cpu_dai->active++;
+ codec_dai->active++;
+ fe->codec->active++;
+
mutex_unlock(&fe->card->mutex);
return 0;
@@ -247,6 +264,10 @@
struct snd_soc_dpcm_params *dpcm;
int stream, ret;
+ struct snd_soc_dai *cpu_dai = fe->cpu_dai;
+ struct snd_soc_dai *codec_dai = fe->codec_dai;
+ struct snd_soc_codec *codec = fe->codec;
+
if (cstream->direction == SND_COMPRESS_PLAYBACK)
stream = SNDRV_PCM_STREAM_PLAYBACK;
else
@@ -254,6 +275,19 @@
mutex_lock_nested(&fe->card->mutex, SND_SOC_CARD_CLASS_RUNTIME);
+ if (cstream->direction == SND_COMPRESS_PLAYBACK) {
+ cpu_dai->playback_active--;
+ codec_dai->playback_active--;
+ snd_soc_dai_digital_mute(codec_dai, 1);
+ } else {
+ cpu_dai->capture_active--;
+ codec_dai->capture_active--;
+ }
+
+ cpu_dai->active--;
+ codec_dai->active--;
+ codec->active--;
+
fe->dpcm[stream].runtime_update = SND_SOC_DPCM_UPDATE_FE;
ret = dpcm_be_dai_hw_free(fe, stream);