[alsa-devel] [PATCH] ASoC: Check that WM8996 FLL started even if we don't have the IRQ
Girdwood, Liam
lrg at ti.com
Tue Sep 6 02:40:56 CEST 2011
On 5 September 2011 19:06, Mark Brown
<broonie at opensource.wolfsonmicro.com>wrote:
> We can directly read the FLL lock status on WM8996 so even if we don't
> have an interrupt wired up we can still verify that the FLL started
> successfully.
>
> Signed-off-by: Mark Brown <broonie at opensource.wolfsonmicro.com>
> ---
> sound/soc/codecs/wm8996.c | 26 +++++++++++++++++++-------
> 1 files changed, 19 insertions(+), 7 deletions(-)
>
> diff --git a/sound/soc/codecs/wm8996.c b/sound/soc/codecs/wm8996.c
> index 169a865..cbd0206 100644
> --- a/sound/soc/codecs/wm8996.c
> +++ b/sound/soc/codecs/wm8996.c
> @@ -2054,7 +2054,7 @@ static int wm8996_set_fll(struct snd_soc_codec
> *codec, int fll_id, int source,
> struct i2c_client *i2c = to_i2c_client(codec->dev);
> struct _fll_div fll_div;
> unsigned long timeout;
> - int ret, reg;
> + int ret, reg, retry;
>
> /* Any change? */
> if (source == wm8996->fll_src && Fref == wm8996->fll_fref &&
> @@ -2141,17 +2141,29 @@ static int wm8996_set_fll(struct snd_soc_codec
> *codec, int fll_id, int source,
> else
> timeout = msecs_to_jiffies(2);
>
> - /* Allow substantially longer if we've actually got the IRQ */
> + /* Allow substantially longer if we've actually got the IRQ, poll
> + * at a slightly higher rate if we don't.
> + */
> if (i2c->irq)
> - timeout *= 1000;
> + timeout *= 10;
> + else
> + timeout /= 2;
>
> - ret = wait_for_completion_timeout(&wm8996->fll_lock, timeout);
> + for (retry = 0; retry < 10; retry++) {
> + ret = wait_for_completion_timeout(&wm8996->fll_lock,
> + timeout);
> + if (ret != 0) {
> + WARN_ON(!i2c->irq);
> + break;
> + }
>
> - if (ret == 0 && i2c->irq) {
> + ret = snd_soc_read(codec, WM8996_INTERRUPT_RAW_STATUS_2);
> + if (ret & WM8996_FLL_LOCK_STS)
> + break;
> + }
> + if (retry == 10) {
> dev_err(codec->dev, "Timed out waiting for FLL\n");
> ret = -ETIMEDOUT;
> - } else {
> - ret = 0;
> }
>
> dev_dbg(codec->dev, "FLL configured for %dHz->%dHz\n", Fref, Fout);
> --
> 1.7.5.4
>
> Acked-by: Liam Girdwood <lrg at ti.com>
More information about the Alsa-devel
mailing list