On Mon, Jan 13, 2020 at 11:30:48AM +0000, Srinivas Kandagatla wrote: > > > On 05/01/2020 10:27, Stephan Gerhold wrote: > > 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@xxxxxxxxxx> > > Signed-off-by: Stephan Gerhold <stephan@xxxxxxxxxxx> > > Thanks for the patch and testing it with QDSP6. > > > --- > > Tested on msm8916-samsung-a5u: > > - qdsp6 does no longer stop working after playing audio a few times > > - lpass-cpu is still working fine (no difference) > > --- > > sound/soc/codecs/msm8916-wcd-digital.c | 6 ++++++ > > 1 file changed, 6 insertions(+) > > > > diff --git a/sound/soc/codecs/msm8916-wcd-digital.c b/sound/soc/codecs/msm8916-wcd-digital.c > > index 58b2468fb2a7..09fccacadd6b 100644 > > --- a/sound/soc/codecs/msm8916-wcd-digital.c > > +++ b/sound/soc/codecs/msm8916-wcd-digital.c > > @@ -586,6 +586,12 @@ static int msm8916_wcd_digital_enable_interpolator( > > snd_soc_component_write(component, rx_gain_reg[w->shift], > > snd_soc_component_read32(component, rx_gain_reg[w->shift])); > > break; > > + case SND_SOC_DAPM_POST_PMD: > > We should do this in SND_SOC_DAPM_PRE_PMU rather than in power down > sequence. > Thanks for the suggestion! Any particular reason for this? I used earlier versions of your msm8916-wcd patch series and the downstream driver as a base, and it does this in POST_PMD: https://source.codeaurora.org/quic/la/kernel/msm-3.10/tree/sound/soc/codecs/msm8x16-wcd.c?h=LA.BR.1.2.9.1-02310-8x16.0#n3773 For msm8916_wcd_digital_enable_dec() we also do it in POST_PMD: /* ... */ case SND_SOC_DAPM_POST_PMD: snd_soc_component_update_bits(component, dec_reset_reg, 1 << w->shift, 1 << w->shift); snd_soc_component_update_bits(component, dec_reset_reg, 1 << w->shift, 0x0); /* ... */ I don't mind testing if moving it to PRE_PMU works, I'm just wondering if doing it in PRE_PMU has any advantages. > > > + 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; > > } > > _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx https://mailman.alsa-project.org/mailman/listinfo/alsa-devel