ASoC: arizona: Factor out FLL enable
authorCharles Keepax <ckeepax@opensource.wolfsonmicro.com>
Wed, 20 Feb 2013 17:28:38 +0000 (17:28 +0000)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Mon, 4 Mar 2013 03:01:00 +0000 (11:01 +0800)
In preparation for additional features on the FLL this patch factors out
the code for enabling an FLL into a seperate function.

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

index a8821a819adc821b871fc778df147f08a148cccc..e770945fa019caa53f33ddf7930d3d7ef2619d8e 100644 (file)
@@ -1090,6 +1090,41 @@ static bool arizona_is_enabled_fll(struct arizona_fll *fll)
        return reg & ARIZONA_FLL1_ENA;
 }
 
+static void arizona_enable_fll(struct arizona_fll *fll,
+                             struct arizona_fll_cfg *ref,
+                             struct arizona_fll_cfg *sync)
+{
+       struct arizona *arizona = fll->arizona;
+       int ret;
+
+       regmap_update_bits(arizona->regmap, fll->base + 5,
+                          ARIZONA_FLL1_OUTDIV_MASK,
+                          ref->outdiv << ARIZONA_FLL1_OUTDIV_SHIFT);
+
+       arizona_apply_fll(arizona, fll->base, ref, fll->ref_src);
+       if (fll->sync_src >= 0)
+               arizona_apply_fll(arizona, fll->base + 0x10, sync,
+                                 fll->sync_src);
+
+       if (!arizona_is_enabled_fll(fll))
+               pm_runtime_get(arizona->dev);
+
+       /* Clear any pending completions */
+       try_wait_for_completion(&fll->ok);
+
+       regmap_update_bits(arizona->regmap, fll->base + 1,
+                          ARIZONA_FLL1_ENA, ARIZONA_FLL1_ENA);
+       if (fll->sync_src >= 0)
+               regmap_update_bits(arizona->regmap, fll->base + 0x11,
+                                  ARIZONA_FLL1_SYNC_ENA,
+                                  ARIZONA_FLL1_SYNC_ENA);
+
+       ret = wait_for_completion_timeout(&fll->ok,
+                                         msecs_to_jiffies(250));
+       if (ret == 0)
+               arizona_fll_warn(fll, "Timed out waiting for lock\n");
+}
+
 static void arizona_disable_fll(struct arizona_fll *fll)
 {
        struct arizona *arizona = fll->arizona;
@@ -1107,9 +1142,7 @@ static void arizona_disable_fll(struct arizona_fll *fll)
 int arizona_set_fll(struct arizona_fll *fll, int source,
                    unsigned int Fref, unsigned int Fout)
 {
-       struct arizona *arizona = fll->arizona;
        struct arizona_fll_cfg ref, sync;
-       bool ena;
        int ret;
 
        if (fll->fref == Fref && fll->fout == Fout)
@@ -1140,35 +1173,8 @@ int arizona_set_fll(struct arizona_fll *fll, int source,
                fll->sync_freq = Fref;
        }
 
-       ena = arizona_is_enabled_fll(fll);
-
        if (Fout) {
-               regmap_update_bits(arizona->regmap, fll->base + 5,
-                                  ARIZONA_FLL1_OUTDIV_MASK,
-                                  ref.outdiv << ARIZONA_FLL1_OUTDIV_SHIFT);
-
-               arizona_apply_fll(arizona, fll->base, &ref, fll->ref_src);
-               if (fll->sync_src >= 0)
-                       arizona_apply_fll(arizona, fll->base + 0x10, &sync,
-                                         fll->sync_src);
-
-               if (!ena)
-                       pm_runtime_get(arizona->dev);
-
-               /* Clear any pending completions */
-               try_wait_for_completion(&fll->ok);
-
-               regmap_update_bits(arizona->regmap, fll->base + 1,
-                                  ARIZONA_FLL1_ENA, ARIZONA_FLL1_ENA);
-               if (fll->sync_src >= 0)
-                       regmap_update_bits(arizona->regmap, fll->base + 0x11,
-                                          ARIZONA_FLL1_SYNC_ENA,
-                                          ARIZONA_FLL1_SYNC_ENA);
-
-               ret = wait_for_completion_timeout(&fll->ok,
-                                                 msecs_to_jiffies(250));
-               if (ret == 0)
-                       arizona_fll_warn(fll, "Timed out waiting for lock\n");
+               arizona_enable_fll(fll, &ref, &sync);
        } else {
                arizona_disable_fll(fll);
        }