ASoC: wm8962: Restore device state after reset in runtime resume
authorMark Brown <broonie@linaro.org>
Fri, 7 Jun 2013 15:19:58 +0000 (16:19 +0100)
committerMark Brown <broonielinaro.org>
Mon, 10 Jun 2013 12:50:44 +0000 (13:50 +0100)
After the device has been reset we need to repeat the same
initialisation we do on probe to make sure that the device is in
a known state.

Tested-by: Nicolin Chen <b42378@freescale.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
sound/soc/codecs/wm8962.c

index 26219ea2bbb526599950a17470d9429ef270e505..7a7a0567e54786ce5be061858e88413af76fd9fe 100644 (file)
@@ -3756,6 +3756,21 @@ static int wm8962_runtime_resume(struct device *dev)
 
        wm8962_reset(wm8962);
 
+       /* SYSCLK defaults to on; make sure it is off so we can safely
+        * write to registers if the device is declocked.
+        */
+       regmap_update_bits(wm8962->regmap, WM8962_CLOCKING2,
+                          WM8962_SYSCLK_ENA, 0);
+
+       /* Ensure we have soft control over all registers */
+       regmap_update_bits(wm8962->regmap, WM8962_CLOCKING2,
+                          WM8962_CLKREG_OVD, WM8962_CLKREG_OVD);
+
+       /* Ensure that the oscillator and PLLs are disabled */
+       regmap_update_bits(wm8962->regmap, WM8962_PLL2,
+                          WM8962_OSC_ENA | WM8962_PLL2_ENA | WM8962_PLL3_ENA,
+                          0);
+
        regcache_sync(wm8962->regmap);
 
        return 0;