Skip to contentSkip to conversation

ASoC: dapm: Don't create routes when creating kcontrols

PATCH In review Mark Brown 2 participants 2 messages Aug 12, 2013 – Aug 13, 2013

Subsystems (2)
lore
Share & tools
lore

Mark Brown

author maintainer
#0 lore raw

PATCH 1/1 ASoC: dapm: Don't create routes when creating kcontrols

From: Mark Brown <[email protected]>

Attempting to create the route as part of adding a mux control causes us to attempt to add the same route twice since we loop over all sources for the mux after creating the control. Instead do the addition in the callers.

---
 sound/soc/soc-dapm.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)
sound/soc/soc-dapm.c +5 -4
index 662a904..b78eaa1 100644
@@ -665,7 +665,7 @@ static int dapm_is_shared_kcontrol(struct snd_soc_dapm_context *dapm,
  * create it. Either way, add the widget into the control's widget list
  */
 static int dapm_create_or_share_mixmux_kcontrol(struct snd_soc_dapm_widget *w,
-	int kci, struct snd_soc_dapm_path *path)
+	int kci)
 {
 	struct snd_soc_dapm_context *dapm = w->dapm;
 	struct snd_card *card = dapm->card->snd_card;
@@ -766,7 +766,6 @@ static int dapm_create_or_share_mixmux_kcontrol(struct snd_soc_dapm_widget *w,
 		return ret;
 
 	w->kcontrols[kci] = kcontrol;
-	dapm_kcontrol_add_path(kcontrol, path);
 
 	return 0;
 }
@@ -790,9 +789,11 @@ static int dapm_new_mixer(struct snd_soc_dapm_widget *w)
 				continue;
 			}
 
-			ret = dapm_create_or_share_mixmux_kcontrol(w, i, path);
+			ret = dapm_create_or_share_mixmux_kcontrol(w, i);
 			if (ret < 0)
 				return ret;
+
+			dapm_kcontrol_add_path(w->kcontrols[i], path);
 		}
 	}
 
@@ -821,7 +822,7 @@ static int dapm_new_mux(struct snd_soc_dapm_widget *w)
 	path = list_first_entry(&w->sources, struct snd_soc_dapm_path,
 				list_sink);
 
-	ret = dapm_create_or_share_mixmux_kcontrol(w, 0, path);
+	ret = dapm_create_or_share_mixmux_kcontrol(w, 0);
 	if (ret < 0)
 		return ret;
 
Signature · 1 line
1.8.4.rc1
Acked-by on v1 1/1
#1 lore raw
Quoted 8 lines · Mark Brown

From: Mark Brown <[email protected]>

Attempting to create the route as part of adding a mux control causes us to attempt to add the same route twice since we loop over all sources for the mux after creating the control. Instead do the addition in the callers.

Thanks.

[...]

sound/soc/soc-dapm.c static int dapm_new_mux(struct snd_soc_dapm_widget *w) · line 823

Quoted 3 lines
sound/soc/soc-dapm.c +0 -0
@@ -821,7 +822,7 @@ static int dapm_new_mux(struct snd_soc_dapm_widget *w)
  	path = list_first_entry(&w->sources, struct snd_soc_dapm_path,
  				list_sink);

The two lines above can also be removed

Quoted 7 lines
sound/soc/soc-dapm.c +1 -1
-	ret = dapm_create_or_share_mixmux_kcontrol(w, 0, path);
+	ret = dapm_create_or_share_mixmux_kcontrol(w, 0);
  	if (ret < 0)
  		return ret;