ASoC: Fix suspend with active audio streams

When we get a stream suspend event force the power down since otherwise
the stream would remain marked as active.  In future we'll probably want
to make this stream-specific and add an interface to make the power down
of other widgets optional in order to support leaving bypass paths
active while suspending the processor.

Cc: stable@kernel.org
Reported-by: Joonyoung Shim <jy0922.shim@samsung.com>
Tested-by: Joonyoung Shim <jy0922.shim@samsung.com>
Acked-by: Liam Girdwood <lrg@slimlogic.co.uk>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
This commit is contained in:
Mark Brown 2009-11-23 13:11:53 +00:00
parent bab0212467
commit 50b6bce59d
1 changed files with 17 additions and 3 deletions

View File

@ -973,9 +973,19 @@ static int dapm_power_widgets(struct snd_soc_codec *codec, int event)
if (!w->power_check)
continue;
power = w->power_check(w);
if (power)
sys_power = 1;
/* If we're suspending then pull down all the
* power. */
switch (event) {
case SND_SOC_DAPM_STREAM_SUSPEND:
power = 0;
break;
default:
power = w->power_check(w);
if (power)
sys_power = 1;
break;
}
if (w->power == power)
continue;
@ -999,8 +1009,12 @@ static int dapm_power_widgets(struct snd_soc_codec *codec, int event)
case SND_SOC_DAPM_STREAM_RESUME:
sys_power = 1;
break;
case SND_SOC_DAPM_STREAM_SUSPEND:
sys_power = 0;
break;
case SND_SOC_DAPM_STREAM_NOP:
sys_power = codec->bias_level != SND_SOC_BIAS_STANDBY;
break;
default:
break;
}