Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 50b6bce5 authored by Mark Brown's avatar Mark Brown
Browse files

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: default avatarJoonyoung Shim <jy0922.shim@samsung.com>
Tested-by: default avatarJoonyoung Shim <jy0922.shim@samsung.com>
Acked-by: default avatarLiam Girdwood <lrg@slimlogic.co.uk>
Signed-off-by: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
parent bab02124
Loading
Loading
Loading
Loading
+17 −3
Original line number Diff line number Diff line
@@ -973,9 +973,19 @@ static int dapm_power_widgets(struct snd_soc_codec *codec, int event)
			if (!w->power_check)
				continue;

			/* 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;
		}