Commit b14b76a5 authored by Mark Brown's avatar Mark Brown

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
...@@ -966,6 +966,22 @@ static int dapm_power_widgets(struct snd_soc_codec *codec, int event) ...@@ -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 we're changing to all on or all off then prepare */
if ((sys_power && codec->bias_level == SND_SOC_BIAS_STANDBY) || if ((sys_power && codec->bias_level == SND_SOC_BIAS_STANDBY) ||
(!sys_power && codec->bias_level == SND_SOC_BIAS_ON)) { (!sys_power && codec->bias_level == SND_SOC_BIAS_ON)) {
......
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