|
@@ -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;
|