ASoC: wm8962: Use force clear for WM8962_SYSCLK_ENA after reset
authorShengjiu Wang <shengjiu.wang@nxp.com>
Wed, 13 May 2020 05:30:35 +0000 (13:30 +0800)
committerMark Brown <broonie@kernel.org>
Wed, 13 May 2020 11:00:13 +0000 (12:00 +0100)
When CLOCKING2 is non-volatile register, we need force clear
the WM8962_SYSCLK_ENA bit after reset, for the value in cache
maybe 0 but in hardware it is 1. Otherwise there will issue
as below statement in driver.

/* SYSCLK defaults to on; make sure it is off so we can safely
 * write to registers if the device is declocked.

Fixes: c38b608504aa ("ASoC: wm8962: set CLOCKING2 as non-volatile register")
Signed-off-by: Shengjiu Wang <shengjiu.wang@nxp.com>
Acked-by: Charles Keepax <ckeepax@opensource.cirrus.com>
Link: https://lore.kernel.org/r/1589347835-20554-1-git-send-email-shengjiu.wang@nxp.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/codecs/wm8962.c

index 0a2cfff..08d19df 100644 (file)
@@ -3798,8 +3798,8 @@ static int wm8962_runtime_resume(struct device *dev)
        /* 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);
+       regmap_write_bits(wm8962->regmap, WM8962_CLOCKING2,
+                         WM8962_SYSCLK_ENA, 0);
 
        /* Ensure we have soft control over all registers */
        regmap_update_bits(wm8962->regmap, WM8962_CLOCKING2,