diff options
author | Mark Brown <broonie@linaro.org> | 2013-06-03 10:20:39 +0100 |
---|---|---|
committer | Mark Brown <broonie@linaro.org> | 2013-06-05 19:38:15 +0100 |
commit | 2bdc1bb2b4e1f517d8aa5bbbad9cb6ccac8a94fb (patch) | |
tree | dca339c5567b178b28725cf840fe96ab2f70ab8e /sound/soc/codecs/sgtl5000.c | |
parent | dd4d2d6dfb49e8916064f2cb07f0ad7b32a82fb7 (diff) | |
download | linux-2bdc1bb2b4e1f517d8aa5bbbad9cb6ccac8a94fb.tar.gz linux-2bdc1bb2b4e1f517d8aa5bbbad9cb6ccac8a94fb.tar.bz2 linux-2bdc1bb2b4e1f517d8aa5bbbad9cb6ccac8a94fb.zip |
ASoC: sgtl5000: Make device cache only when powered off
When the regulators have been disabled mark the device as cache only so
that we don't try to interact with the hardware.
Signed-off-by: Mark Brown <broonie@linaro.org>
Diffstat (limited to 'sound/soc/codecs/sgtl5000.c')
-rw-r--r-- | sound/soc/codecs/sgtl5000.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/sound/soc/codecs/sgtl5000.c b/sound/soc/codecs/sgtl5000.c index b4297416401e..c8f2afb74706 100644 --- a/sound/soc/codecs/sgtl5000.c +++ b/sound/soc/codecs/sgtl5000.c @@ -907,10 +907,25 @@ static int sgtl5000_set_bias_level(struct snd_soc_codec *codec, if (ret) return ret; udelay(10); + + regcache_cache_only(sgtl5000->regmap, false); + + ret = regcache_sync(sgtl5000->regmap); + if (ret != 0) { + dev_err(codec->dev, + "Failed to restore cache: %d\n", ret); + + regcache_cache_only(sgtl5000->regmap, true); + regulator_bulk_disable(ARRAY_SIZE(sgtl5000->supplies), + sgtl5000->supplies); + + return ret; + } } break; case SND_SOC_BIAS_OFF: + regcache_cache_only(sgtl5000->regmap, true); regulator_bulk_disable(ARRAY_SIZE(sgtl5000->supplies), sgtl5000->supplies); break; |