Skip to content

Commit

Permalink
ASoC: Fix suspend with active audio streams
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Mark Brown committed Nov 23, 2009
1 parent bab0212 commit 50b6bce
Showing 1 changed file with 17 additions and 3 deletions.
20 changes: 17 additions & 3 deletions sound/soc/soc-dapm.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
}
Expand Down

0 comments on commit 50b6bce

Please sign in to comment.