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

Commit b14b76a5 authored by Mark Brown's avatar Mark Brown
Browse files

ASoC: Fix handling of bias levels for non-DAPM codecs



If the system doesn't have any DAPM widgets then we can't use their
state to check if the bias level for the codec should be up.

Signed-off-by: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
parent 0c093fb5
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -966,6 +966,22 @@ static int dapm_power_widgets(struct snd_soc_codec *codec, int event)
		}
	}

	/* If there are no DAPM widgets then try to figure out power from the
	 * event type.
	 */
	if (list_empty(&codec->dapm_widgets)) {
		switch (event) {
		case SND_SOC_DAPM_STREAM_START:
		case SND_SOC_DAPM_STREAM_RESUME:
			sys_power = 1;
			break;
		case SND_SOC_DAPM_STREAM_NOP:
			sys_power = codec->bias_level != SND_SOC_BIAS_STANDBY;
		default:
			break;
		}
	}

	/* If we're changing to all on or all off then prepare */
	if ((sys_power && codec->bias_level == SND_SOC_BIAS_STANDBY) ||
	    (!sys_power && codec->bias_level == SND_SOC_BIAS_ON)) {