All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stephan Gerhold <stephan@gerhold.net>
To: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Cc: alsa-devel@alsa-project.org, Takashi Iwai <tiwai@suse.com>,
	Liam Girdwood <lgirdwood@gmail.com>,
	Mark Brown <broonie@kernel.org>,
	~postmarketos/upstreaming@lists.sr.ht
Subject: Re: [alsa-devel] [PATCH] ASoC: msm8916-wcd-digital: Reset RX interpolation path after use
Date: Mon, 13 Jan 2020 14:10:34 +0100	[thread overview]
Message-ID: <20200113131034.GA12166@gerhold.net> (raw)
In-Reply-To: <33e68247-ff11-6c0c-b91c-9b406f9607cd@linaro.org>

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@linaro.org>
> > Signed-off-by: Stephan Gerhold <stephan@gerhold.net>
> 
> 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@alsa-project.org
https://mailman.alsa-project.org/mailman/listinfo/alsa-devel

  reply	other threads:[~2020-01-14 13:14 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-01-05 10:27 [alsa-devel] [PATCH] ASoC: msm8916-wcd-digital: Reset RX interpolation path after use Stephan Gerhold
2020-01-13 11:30 ` Srinivas Kandagatla
2020-01-13 13:10   ` Stephan Gerhold [this message]
2020-01-13 13:55     ` Srinivas Kandagatla
2020-01-13 15:12 ` [alsa-devel] Applied "ASoC: msm8916-wcd-digital: Reset RX interpolation path after use" to the asoc tree Mark Brown

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200113131034.GA12166@gerhold.net \
    --to=stephan@gerhold.net \
    --cc=alsa-devel@alsa-project.org \
    --cc=broonie@kernel.org \
    --cc=lgirdwood@gmail.com \
    --cc=srinivas.kandagatla@linaro.org \
    --cc=tiwai@suse.com \
    --cc=~postmarketos/upstreaming@lists.sr.ht \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.