Commit d3d4e524 authored by Sylwester Nawrocki's avatar Sylwester Nawrocki Committed by Mark Brown

ASoC: samsung: Correct I2S DAI suspend/resume ops

We should save/restore relevant I2S registers regardless of
the dai->active flag, otherwise some settings are being lost
after system suspend/resume cycle. E.g. I2S slave mode set only
during dai initialization is not preserved and the device ends
up in master mode after system resume.
Signed-off-by: default avatarSylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: default avatarMark Brown <broonie@linaro.org>
Cc: stable@vger.kernel.org
parent 7171511e
...@@ -920,11 +920,9 @@ static int i2s_suspend(struct snd_soc_dai *dai) ...@@ -920,11 +920,9 @@ static int i2s_suspend(struct snd_soc_dai *dai)
{ {
struct i2s_dai *i2s = to_info(dai); struct i2s_dai *i2s = to_info(dai);
if (dai->active) { i2s->suspend_i2smod = readl(i2s->addr + I2SMOD);
i2s->suspend_i2smod = readl(i2s->addr + I2SMOD); i2s->suspend_i2scon = readl(i2s->addr + I2SCON);
i2s->suspend_i2scon = readl(i2s->addr + I2SCON); i2s->suspend_i2spsr = readl(i2s->addr + I2SPSR);
i2s->suspend_i2spsr = readl(i2s->addr + I2SPSR);
}
return 0; return 0;
} }
...@@ -933,11 +931,9 @@ static int i2s_resume(struct snd_soc_dai *dai) ...@@ -933,11 +931,9 @@ static int i2s_resume(struct snd_soc_dai *dai)
{ {
struct i2s_dai *i2s = to_info(dai); struct i2s_dai *i2s = to_info(dai);
if (dai->active) { writel(i2s->suspend_i2scon, i2s->addr + I2SCON);
writel(i2s->suspend_i2scon, i2s->addr + I2SCON); writel(i2s->suspend_i2smod, i2s->addr + I2SMOD);
writel(i2s->suspend_i2smod, i2s->addr + I2SMOD); writel(i2s->suspend_i2spsr, i2s->addr + I2SPSR);
writel(i2s->suspend_i2spsr, i2s->addr + I2SPSR);
}
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment