diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c index 58bca9a96b61..5c73bc21d41c 100644 --- a/sound/soc/soc-dapm.c +++ b/sound/soc/soc-dapm.c @@ -1783,6 +1783,8 @@ static int dapm_power_widgets(struct snd_soc_card *card, int event) LIST_HEAD(down_list); ASYNC_DOMAIN_EXCLUSIVE(async_domain); enum snd_soc_bias_level bias; + struct snd_soc_platform *p; + struct snd_soc_codec *c; lockdep_assert_held(&card->dapm_mutex); @@ -1865,7 +1867,9 @@ static int dapm_power_widgets(struct snd_soc_card *card, int event) dapm_pre_sequence_async(&card->dapm, 0); /* Run other bias changes in parallel */ list_for_each_entry(d, &card->dapm_list, list) { - if (d != &card->dapm) + p = snd_soc_dapm_to_platform(d); + c = snd_soc_dapm_to_codec(d); + if ((d != &card->dapm) && (c || p)) async_schedule_domain(dapm_pre_sequence_async, d, &async_domain); } @@ -1889,7 +1893,9 @@ static int dapm_power_widgets(struct snd_soc_card *card, int event) /* Run all the bias changes in parallel */ list_for_each_entry(d, &card->dapm_list, list) { - if (d != &card->dapm) + p = snd_soc_dapm_to_platform(d); + c = snd_soc_dapm_to_codec(d); + if ((d != &card->dapm) && (c || p)) async_schedule_domain(dapm_post_sequence_async, d, &async_domain); }