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: Mark Brown <broonie@opensource.wolfsonmicro.com>
This commit is contained in:
@@ -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)) {
|
||||||
|
Reference in New Issue
Block a user