summaryrefslogtreecommitdiff
path: root/sound/soc/codecs
diff options
context:
space:
mode:
authorOleksandr Suvorov <oleksandr.suvorov@toradex.com>2019-08-13 16:19:26 +0300
committerOleksandr Suvorov <oleksandr.suvorov@toradex.com>2021-01-27 20:36:26 +0200
commit3875f328252c602d876dc6d53754df386f38ffde (patch)
treed2817880b6c58865cfec0c3552ef38499299f63f /sound/soc/codecs
parent1e652856a5b1dda2ab2c624fb14a47be0b12c059 (diff)
ASoC: sgtl5000: Restore mclk on resume device
sgtl5000 goes to fail state after suspend system: [ 60.308603] sgtl5000 16-000a: ASoC: Failed to turn on bias: -5 [ 60.309264] sgtl5000 16-000a: Unable to sync registers 0x2-0x6. -5 To fix it, mclk is forced to reenable on system resume. Signed-off-by: Oleksandr Suvorov <oleksandr.suvorov@toradex.com> (cherry picked from commit 475eb701f1a774b713433dfdfbc52fd04e8e6691) Conflicts: sound/soc/codecs/sgtl5000.c Signed-off-by: Max Krummenacher <max.krummenacher@toradex.com>
Diffstat (limited to 'sound/soc/codecs')
-rw-r--r--sound/soc/codecs/sgtl5000.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/sound/soc/codecs/sgtl5000.c b/sound/soc/codecs/sgtl5000.c
index f5b59305c957..6539c38280cd 100644
--- a/sound/soc/codecs/sgtl5000.c
+++ b/sound/soc/codecs/sgtl5000.c
@@ -1514,8 +1514,34 @@ err:
return ret;
}
+static int sgtl5000_suspend(struct snd_soc_component *component)
+{
+ struct sgtl5000_priv *sgtl5000 = snd_soc_component_get_drvdata(component);
+
+ clk_disable_unprepare(sgtl5000->mclk);
+
+ return 0;
+}
+
+static int sgtl5000_resume(struct snd_soc_component *component)
+{
+ int ret;
+ struct sgtl5000_priv *sgtl5000 = snd_soc_component_get_drvdata(component);
+
+ ret = clk_prepare_enable(sgtl5000->mclk);
+ if (ret)
+ dev_err(component->dev, "Error enabling clock %d\n", ret);
+
+ /* Need 8 clocks before I2C accesses */
+ udelay(1);
+
+ return ret;
+}
+
static const struct snd_soc_component_driver sgtl5000_driver = {
.probe = sgtl5000_probe,
+ .suspend = sgtl5000_suspend,
+ .resume = sgtl5000_resume,
.set_bias_level = sgtl5000_set_bias_level,
.controls = sgtl5000_snd_controls,
.num_controls = ARRAY_SIZE(sgtl5000_snd_controls),