From 02bac8135e7427fbac22de1fc88107fecc82e0b8 Mon Sep 17 00:00:00 2001 From: Nicolin Chen Date: Fri, 30 Aug 2013 16:02:35 +0800 Subject: MLK-11479-05 ASoC: fsl: Fix set-mute-failed issue after WM8962 capture cherry-pick below patch from v3.14.y: ENGR00277471 ASoC: fsl: Fix set-mute-failed issue after WM8962 capture We only need to mute WM8962 after playback, so add direction check before doing mute. And a mute failure would cause hw_free() abruptly return after it, which might drop the essential procedure code for FLL controlling. Thus put mute before FLL controlling code and drop its return check. Acked-by: Wang Shengjiu Signed-off-by: Nicolin Chen (cherry picked from commit 3133b6cfb31b202805d31d449bfa70383e5e1c75) --- sound/soc/fsl/imx-wm8962.c | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) (limited to 'sound/soc/fsl/imx-wm8962.c') diff --git a/sound/soc/fsl/imx-wm8962.c b/sound/soc/fsl/imx-wm8962.c index aad4974fcaaf..5cbd961f6785 100644 --- a/sound/soc/fsl/imx-wm8962.c +++ b/sound/soc/fsl/imx-wm8962.c @@ -124,6 +124,13 @@ static int imx_hifi_hw_free(struct snd_pcm_substream *substream) priv->second_stream = NULL; if (!priv->first_stream) { + /* + * Continuously setting FLL would cause playback distortion. + * We can fix it just by mute codec after playback. + */ + if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) + snd_soc_dai_digital_mute(codec_dai, 1, substream->stream); + /* * WM8962 doesn't allow us to continuously setting FLL, * So we set MCLK as sysclk once, which'd remove the limitation. @@ -135,16 +142,6 @@ static int imx_hifi_hw_free(struct snd_pcm_substream *substream) return ret; } - /* - * Continuously setting FLL would cause playback distortion. - * We can fix it just by mute codec after playback. - */ - ret = snd_soc_dai_digital_mute(codec_dai, 1, substream->stream); - if (ret < 0) { - dev_err(dev, "failed to set MUTE: %d\n", ret); - return ret; - } - /* Disable FLL and let codec do pm_runtime_put() */ ret = snd_soc_dai_set_pll(codec_dai, WM8962_FLL, WM8962_FLL_MCLK, 0, 0); -- cgit v1.2.3