|
@@ -3068,9 +3068,13 @@ static void soc_dapm_shutdown_codec(struct snd_soc_dapm_context *dapm)
|
|
|
* standby.
|
|
|
*/
|
|
|
if (powerdown) {
|
|
|
- snd_soc_dapm_set_bias_level(dapm, SND_SOC_BIAS_PREPARE);
|
|
|
+ if (dapm->bias_level == SND_SOC_BIAS_ON)
|
|
|
+ snd_soc_dapm_set_bias_level(dapm,
|
|
|
+ SND_SOC_BIAS_PREPARE);
|
|
|
dapm_seq_run(dapm, &down_list, 0, false);
|
|
|
- snd_soc_dapm_set_bias_level(dapm, SND_SOC_BIAS_STANDBY);
|
|
|
+ if (dapm->bias_level == SND_SOC_BIAS_PREPARE)
|
|
|
+ snd_soc_dapm_set_bias_level(dapm,
|
|
|
+ SND_SOC_BIAS_STANDBY);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -3083,7 +3087,9 @@ void snd_soc_dapm_shutdown(struct snd_soc_card *card)
|
|
|
|
|
|
list_for_each_entry(codec, &card->codec_dev_list, list) {
|
|
|
soc_dapm_shutdown_codec(&codec->dapm);
|
|
|
- snd_soc_dapm_set_bias_level(&codec->dapm, SND_SOC_BIAS_OFF);
|
|
|
+ if (codec->dapm.bias_level == SND_SOC_BIAS_STANDBY)
|
|
|
+ snd_soc_dapm_set_bias_level(&codec->dapm,
|
|
|
+ SND_SOC_BIAS_OFF);
|
|
|
}
|
|
|
}
|
|
|
|