|
@@ -1277,6 +1277,14 @@ static void dapm_seq_check_event(struct snd_soc_dapm_context *dapm,
|
|
|
ev_name = "POST_PMD";
|
|
|
power = 0;
|
|
|
break;
|
|
|
+ case SND_SOC_DAPM_WILL_PMU:
|
|
|
+ ev_name = "WILL_PMU";
|
|
|
+ power = 1;
|
|
|
+ break;
|
|
|
+ case SND_SOC_DAPM_WILL_PMD:
|
|
|
+ ev_name = "WILL_PMD";
|
|
|
+ power = 0;
|
|
|
+ break;
|
|
|
default:
|
|
|
BUG();
|
|
|
return;
|
|
@@ -1737,6 +1745,14 @@ static int dapm_power_widgets(struct snd_soc_dapm_context *dapm, int event)
|
|
|
&async_domain);
|
|
|
async_synchronize_full_domain(&async_domain);
|
|
|
|
|
|
+ list_for_each_entry(w, &down_list, list) {
|
|
|
+ dapm_seq_check_event(dapm, w, SND_SOC_DAPM_WILL_PMD);
|
|
|
+ }
|
|
|
+
|
|
|
+ list_for_each_entry(w, &up_list, list) {
|
|
|
+ dapm_seq_check_event(dapm, w, SND_SOC_DAPM_WILL_PMU);
|
|
|
+ }
|
|
|
+
|
|
|
/* Power down widgets first; try to avoid amplifying pops. */
|
|
|
dapm_seq_run(dapm, &down_list, event, false);
|
|
|
|