aboutsummaryrefslogtreecommitdiffstats
path: root/sound/soc/soc-dapm.c
diff options
context:
space:
mode:
Diffstat (limited to 'sound/soc/soc-dapm.c')
-rw-r--r--sound/soc/soc-dapm.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c
index 57e1c9f71149..eb7436c7acad 100644
--- a/sound/soc/soc-dapm.c
+++ b/sound/soc/soc-dapm.c
@@ -737,6 +737,12 @@ static int dapm_seq_compare(struct snd_soc_dapm_widget *a,
737 737
738 if (sort[a->id] != sort[b->id]) 738 if (sort[a->id] != sort[b->id])
739 return sort[a->id] - sort[b->id]; 739 return sort[a->id] - sort[b->id];
740 if (a->subseq != b->subseq) {
741 if (power_up)
742 return a->subseq - b->subseq;
743 else
744 return b->subseq - a->subseq;
745 }
740 if (a->reg != b->reg) 746 if (a->reg != b->reg)
741 return a->reg - b->reg; 747 return a->reg - b->reg;
742 if (a->dapm != b->dapm) 748 if (a->dapm != b->dapm)
@@ -869,6 +875,7 @@ static void dapm_seq_run(struct snd_soc_dapm_context *dapm,
869 struct snd_soc_dapm_widget *w, *n; 875 struct snd_soc_dapm_widget *w, *n;
870 LIST_HEAD(pending); 876 LIST_HEAD(pending);
871 int cur_sort = -1; 877 int cur_sort = -1;
878 int cur_subseq = -1;
872 int cur_reg = SND_SOC_NOPM; 879 int cur_reg = SND_SOC_NOPM;
873 struct snd_soc_dapm_context *cur_dapm = NULL; 880 struct snd_soc_dapm_context *cur_dapm = NULL;
874 int ret; 881 int ret;
@@ -884,12 +891,13 @@ static void dapm_seq_run(struct snd_soc_dapm_context *dapm,
884 891
885 /* Do we need to apply any queued changes? */ 892 /* Do we need to apply any queued changes? */
886 if (sort[w->id] != cur_sort || w->reg != cur_reg || 893 if (sort[w->id] != cur_sort || w->reg != cur_reg ||
887 w->dapm != cur_dapm) { 894 w->dapm != cur_dapm || w->subseq != cur_subseq) {
888 if (!list_empty(&pending)) 895 if (!list_empty(&pending))
889 dapm_seq_run_coalesced(cur_dapm, &pending); 896 dapm_seq_run_coalesced(cur_dapm, &pending);
890 897
891 INIT_LIST_HEAD(&pending); 898 INIT_LIST_HEAD(&pending);
892 cur_sort = -1; 899 cur_sort = -1;
900 cur_subseq = -1;
893 cur_reg = SND_SOC_NOPM; 901 cur_reg = SND_SOC_NOPM;
894 cur_dapm = NULL; 902 cur_dapm = NULL;
895 } 903 }
@@ -934,6 +942,7 @@ static void dapm_seq_run(struct snd_soc_dapm_context *dapm,
934 default: 942 default:
935 /* Queue it up for application */ 943 /* Queue it up for application */
936 cur_sort = sort[w->id]; 944 cur_sort = sort[w->id];
945 cur_subseq = w->subseq;
937 cur_reg = w->reg; 946 cur_reg = w->reg;
938 cur_dapm = w->dapm; 947 cur_dapm = w->dapm;
939 list_move(&w->power_list, &pending); 948 list_move(&w->power_list, &pending);