ASoC: max98090: Reset codec on resume
authorLiam Girdwood <liam.r.girdwood@linux.intel.com>
Fri, 16 May 2014 13:55:21 +0000 (16:55 +0300)
committerMark Brown <broonie@linaro.org>
Fri, 16 May 2014 18:57:15 +0000 (19:57 +0100)
Make sure we reset codec and clear any IRQs on resume. This matches
the init sequence in probe.

Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
Signed-off-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
sound/soc/codecs/max98090.c

index be86094817eb859e5b83e3e40ac9ff7b49429b40..2888f632564ae1fd851b280b6d84361f1a2dc4cc 100644 (file)
@@ -2392,9 +2392,32 @@ static int max98090_runtime_suspend(struct device *dev)
 }
 #endif
 
+#ifdef CONFIG_PM
+static int max98090_resume(struct device *dev)
+{
+       struct max98090_priv *max98090 = dev_get_drvdata(dev);
+       unsigned int status;
+
+       max98090_reset(max98090);
+
+       /* clear IRQ status */
+       regmap_read(max98090->regmap, M98090_REG_DEVICE_STATUS, &status);
+
+       regcache_sync(max98090->regmap);
+
+       return 0;
+}
+
+static int max98090_suspend(struct device *dev)
+{
+       return 0;
+}
+#endif
+
 static const struct dev_pm_ops max98090_pm = {
        SET_RUNTIME_PM_OPS(max98090_runtime_suspend,
                max98090_runtime_resume, NULL)
+       SET_SYSTEM_SLEEP_PM_OPS(max98090_suspend, max98090_resume)
 };
 
 static const struct i2c_device_id max98090_i2c_id[] = {