ASoC: sgtl5000: Make device cache only when powered off
authorMark Brown <broonie@linaro.org>
Mon, 3 Jun 2013 09:20:39 +0000 (10:20 +0100)
committerMark Brown <broonie@linaro.org>
Wed, 5 Jun 2013 18:38:15 +0000 (19:38 +0100)
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>
sound/soc/codecs/sgtl5000.c

index b429741..c8f2afb 100644 (file)
@@ -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;