summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichał Mirosław <mirq-linux@rere.qmqm.pl>2018-12-19 15:11:16 -0500
committerMark Brown <broonie@kernel.org>2019-01-03 11:34:06 -0500
commit5489e81f981b1fb7c2fdaba332122fff3290e9a4 (patch)
tree3e7a3aa03b0d1b366aa106eb3c684ae8ad2b1446
parentfb82c6ed31902e651cc9324108f507babfabc890 (diff)
ASoC: wm8904: enable MCLK in STANDBY
MCLK input is needed when accessing any register after enabling SYSCLK. This also fixes imbalance of clk_enable / clk_disable when transitioning between ON -> STANDBY -> ON bias levels. Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl> Acked-by: Charles Keepax <ckeepax@opensource.cirrus.com> Signed-off-by: Mark Brown <broonie@kernel.org>
-rw-r--r--sound/soc/codecs/wm8904.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/sound/soc/codecs/wm8904.c b/sound/soc/codecs/wm8904.c
index 9283a2dc70aa..9e0f96e0f8ec 100644
--- a/sound/soc/codecs/wm8904.c
+++ b/sound/soc/codecs/wm8904.c
@@ -1837,9 +1837,6 @@ static int wm8904_set_bias_level(struct snd_soc_component *component,
1837 1837
1838 switch (level) { 1838 switch (level) {
1839 case SND_SOC_BIAS_ON: 1839 case SND_SOC_BIAS_ON:
1840 ret = clk_prepare_enable(wm8904->mclk);
1841 if (ret)
1842 return ret;
1843 break; 1840 break;
1844 1841
1845 case SND_SOC_BIAS_PREPARE: 1842 case SND_SOC_BIAS_PREPARE:
@@ -1864,6 +1861,15 @@ static int wm8904_set_bias_level(struct snd_soc_component *component,
1864 return ret; 1861 return ret;
1865 } 1862 }
1866 1863
1864 ret = clk_prepare_enable(wm8904->mclk);
1865 if (ret) {
1866 dev_err(component->dev,
1867 "Failed to enable MCLK: %d\n", ret);
1868 regulator_bulk_disable(ARRAY_SIZE(wm8904->supplies),
1869 wm8904->supplies);
1870 return ret;
1871 }
1872
1867 regcache_cache_only(wm8904->regmap, false); 1873 regcache_cache_only(wm8904->regmap, false);
1868 regcache_sync(wm8904->regmap); 1874 regcache_sync(wm8904->regmap);
1869 1875