]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
ASoC: tas5086: add suspend callback
authorDaniel Mack <zonque@gmail.com>
Tue, 1 Oct 2013 12:48:26 +0000 (14:48 +0200)
committerMark Brown <broonie@linaro.org>
Thu, 3 Oct 2013 13:14:38 +0000 (14:14 +0100)
When going to suspend, shut down all channels and re-do the init
procedure at resume time.

Signed-off-by: Daniel Mack <zonque@gmail.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
sound/soc/codecs/tas5086.c

index 3a88c68145c2483ec098e90df9787182134903da..2996d2ea026b31692d747b2255d071999be551f7 100644 (file)
@@ -762,14 +762,39 @@ static struct snd_soc_dai_driver tas5086_dai = {
 };
 
 #ifdef CONFIG_PM
+static int tas5086_soc_suspend(struct snd_soc_codec *codec)
+{
+       struct tas5086_private *priv = snd_soc_codec_get_drvdata(codec);
+       int ret;
+
+       /* Shut down all channels */
+       ret = regmap_write(priv->regmap, TAS5086_SYS_CONTROL_2, 0x60);
+       if (ret < 0)
+               return ret;
+
+       return 0;
+}
+
 static int tas5086_soc_resume(struct snd_soc_codec *codec)
 {
        struct tas5086_private *priv = snd_soc_codec_get_drvdata(codec);
+       int ret;
 
-       /* Restore codec state */
-       return regcache_sync(priv->regmap);
+       tas5086_reset(priv);
+       regcache_mark_dirty(priv->regmap);
+
+       ret = tas5086_init(codec->dev, priv);
+       if (ret < 0)
+               return ret;
+
+       ret = regcache_sync(priv->regmap);
+       if (ret < 0)
+               return ret;
+
+       return 0;
 }
 #else
+#define tas5086_soc_suspend    NULL
 #define tas5086_soc_resume     NULL
 #endif /* CONFIG_PM */
 
@@ -832,6 +857,7 @@ static int tas5086_remove(struct snd_soc_codec *codec)
 static struct snd_soc_codec_driver soc_codec_dev_tas5086 = {
        .probe                  = tas5086_probe,
        .remove                 = tas5086_remove,
+       .suspend                = tas5086_soc_suspend,
        .resume                 = tas5086_soc_resume,
        .controls               = tas5086_controls,
        .num_controls           = ARRAY_SIZE(tas5086_controls),