Commit 125a25da authored by Mark Brown's avatar Mark Brown

ASoC: core: Better support for idle_bias_off suspend ignores

If an idle_bias_off device is in any state other than off then it is still
active for some reason (typically a low power function such as accessory
detection). This wasn't an issue when the feature was implemented as we
always went to _ON for any active function, subsequent power improvements
have changed things.

With the modern way of doing things we should overhaul the infrastructure
to allow devices to explicitly take references for these functions but
that's a much more invasive change and will require driver updates to
deploy, this will bring the framework into line with the existing driver
set before we do that work.
Signed-off-by: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
Acked-by: default avatarLiam Girdwood <lrg@ti.com>
parent 67f97f5c
...@@ -567,6 +567,17 @@ int snd_soc_suspend(struct device *dev) ...@@ -567,6 +567,17 @@ int snd_soc_suspend(struct device *dev)
if (!codec->suspended && codec->driver->suspend) { if (!codec->suspended && codec->driver->suspend) {
switch (codec->dapm.bias_level) { switch (codec->dapm.bias_level) {
case SND_SOC_BIAS_STANDBY: case SND_SOC_BIAS_STANDBY:
/*
* If the CODEC is capable of idle
* bias off then being in STANDBY
* means it's doing something,
* otherwise fall through.
*/
if (codec->dapm.idle_bias_off) {
dev_dbg(codec->dev,
"idle_bias_off CODEC on over suspend\n");
break;
}
case SND_SOC_BIAS_OFF: case SND_SOC_BIAS_OFF:
codec->driver->suspend(codec); codec->driver->suspend(codec);
codec->suspended = 1; codec->suspended = 1;
......
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