ASoC: tas2552: Fix PM sequencing
authorDan Murphy <dmurphy@ti.com>
Fri, 18 Jul 2014 17:31:07 +0000 (12:31 -0500)
committerMark Brown <broonie@linaro.org>
Mon, 21 Jul 2014 12:18:44 +0000 (13:18 +0100)
In the pm suspend/resume it is better
to disable the GPIO after the regmap_cache
setting calls so that if the call is interrupted
the new reg values will be cached and set on resume.

Also add pm_runtime_put in the remove call.

Signed-off-by: Dan Murphy <dmurphy@ti.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
sound/soc/codecs/tas2552.c

index f0760af..a3ae394 100644 (file)
@@ -239,12 +239,12 @@ static int tas2552_runtime_suspend(struct device *dev)
 
        tas2552_sw_shutdown(tas2552, 0);
 
-       if (tas2552->enable_gpio)
-               gpiod_set_value(tas2552->enable_gpio, 0);
-
        regcache_cache_only(tas2552->regmap, true);
        regcache_mark_dirty(tas2552->regmap);
 
+       if (tas2552->enable_gpio)
+               gpiod_set_value(tas2552->enable_gpio, 0);
+
        return 0;
 }
 
@@ -382,6 +382,8 @@ static int tas2552_codec_remove(struct snd_soc_codec *codec)
 {
        struct tas2552_data *tas2552 = snd_soc_codec_get_drvdata(codec);
 
+       pm_runtime_put(codec->dev);
+
        if (tas2552->enable_gpio)
                gpiod_set_value(tas2552->enable_gpio, 0);