]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/commitdiff
ASoC: wm8962: Clean up error handling for failed FLL start
authorMark Brown <broonie@linaro.org>
Thu, 30 Jan 2014 20:04:34 +0000 (20:04 +0000)
committerMark Brown <broonie@linaro.org>
Mon, 3 Feb 2014 12:50:59 +0000 (12:50 +0000)
Don't record the FLL as having started and leave the hardware disabled
ensuring we are in a better state if this does happen to be a transient
error and making debugging easier.

Signed-off-by: Mark Brown <broonie@linaro.org>
Acked-by: Charles Keepax <ckeepax@opensource.wolfsonmicro.com>
sound/soc/codecs/wm8962.c

index d7d43c9371f46a3ddbf491d415be32988373a84d..cd96d463a5051d08d0748c1b95b85782f661fc8d 100644 (file)
@@ -2898,8 +2898,6 @@ static int wm8962_set_fll(struct snd_soc_codec *codec, int fll_id, int source,
 
        dev_dbg(codec->dev, "FLL configured for %dHz->%dHz\n", Fref, Fout);
 
-       ret = 0;
-
        /* This should be a massive overestimate but go even
         * higher if we'll error out
         */
@@ -2913,14 +2911,17 @@ static int wm8962_set_fll(struct snd_soc_codec *codec, int fll_id, int source,
 
        if (timeout == 0 && wm8962->irq) {
                dev_err(codec->dev, "FLL lock timed out");
-               ret = -ETIMEDOUT;
+               snd_soc_update_bits(codec, WM8962_FLL_CONTROL_1,
+                                   WM8962_FLL_ENA, 0);
+               pm_runtime_put(codec->dev);
+               return -ETIMEDOUT;
        }
 
        wm8962->fll_fref = Fref;
        wm8962->fll_fout = Fout;
        wm8962->fll_src = source;
 
-       return ret;
+       return 0;
 }
 
 static int wm8962_mute(struct snd_soc_dai *dai, int mute)