+++ /dev/null
-From 85578bbd642f65065039b1765ebe1a867d5435b0 Mon Sep 17 00:00:00 2001
-From: Stephan Gerhold <stephan@gerhold.net>
-Date: Sun, 5 Jan 2020 11:27:53 +0100
-Subject: ASoC: msm8916-wcd-digital: Reset RX interpolation path after use
-
-From: Stephan Gerhold <stephan@gerhold.net>
-
-commit 85578bbd642f65065039b1765ebe1a867d5435b0 upstream.
-
-For some reason, attempting to route audio through QDSP6 on MSM8916
-causes the RX interpolation path to get "stuck" after playing audio
-a few times. In this situation, the analog codec part is still working,
-but the RX path in the digital codec stops working, so you only hear
-the analog parts powering up. After a reboot everything works again.
-
-So far I was not able to reproduce the problem when using lpass-cpu.
-
-The downstream kernel driver avoids this by resetting the RX
-interpolation path after use. In mainline we do something similar
-for the TX decimator (LPASS_CDC_CLK_TX_RESET_B1_CTL), but the
-interpolator reset (LPASS_CDC_CLK_RX_RESET_CTL) got lost when the
-msm8916-wcd driver was split into analog and digital.
-
-Fix this problem by adding the reset to
-msm8916_wcd_digital_enable_interpolator().
-
-Fixes: 150db8c5afa1 ("ASoC: codecs: Add msm8916-wcd digital codec")
-Cc: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
-Signed-off-by: Stephan Gerhold <stephan@gerhold.net>
-Link: https://lore.kernel.org/r/20200105102753.83108-1-stephan@gerhold.net
-Signed-off-by: Mark Brown <broonie@kernel.org>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- sound/soc/codecs/msm8916-wcd-digital.c | 6 ++++++
- 1 file changed, 6 insertions(+)
-
---- a/sound/soc/codecs/msm8916-wcd-digital.c
-+++ b/sound/soc/codecs/msm8916-wcd-digital.c
-@@ -462,6 +462,12 @@ static int msm8916_wcd_digital_enable_dm
- break;
- }
- break;
-+ case SND_SOC_DAPM_POST_PMD:
-+ snd_soc_component_update_bits(component, LPASS_CDC_CLK_RX_RESET_CTL,
-+ 1 << w->shift, 1 << w->shift);
-+ snd_soc_component_update_bits(component, LPASS_CDC_CLK_RX_RESET_CTL,
-+ 1 << w->shift, 0x0);
-+ break;
- }
-
- return 0;