diff options
author | Michał Mirosław <mirq-linux@rere.qmqm.pl> | 2018-12-19 15:11:16 -0500 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2019-01-03 11:34:06 -0500 |
commit | 5489e81f981b1fb7c2fdaba332122fff3290e9a4 (patch) | |
tree | 3e7a3aa03b0d1b366aa106eb3c684ae8ad2b1446 | |
parent | fb82c6ed31902e651cc9324108f507babfabc890 (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.c | 12 |
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 | ||