diff options
Diffstat (limited to 'sound/soc/soc-dapm.c')
-rw-r--r-- | sound/soc/soc-dapm.c | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c index a6fb85d46416..e981a8339f88 100644 --- a/sound/soc/soc-dapm.c +++ b/sound/soc/soc-dapm.c @@ -366,7 +366,7 @@ static int dapm_new_mixer(struct snd_soc_dapm_context *dapm, struct snd_soc_dapm_widget *w) { int i, ret = 0; - size_t name_len; + size_t name_len, prefix_len; struct snd_soc_dapm_path *path; struct snd_card *card = dapm->card->snd_card; const char *prefix; @@ -376,6 +376,11 @@ static int dapm_new_mixer(struct snd_soc_dapm_context *dapm, else prefix = NULL; + if (prefix) + prefix_len = strlen(prefix) + 1; + else + prefix_len = 0; + /* add kcontrol */ for (i = 0; i < w->num_kcontrols; i++) { @@ -403,8 +408,15 @@ static int dapm_new_mixer(struct snd_soc_dapm_context *dapm, switch (w->id) { default: + /* The control will get a prefix from + * the control creation process but + * we're also using the same prefix + * for widgets so cut the prefix off + * the front of the widget name. + */ snprintf(path->long_name, name_len, "%s %s", - w->name, w->kcontrols[i].name); + w->name + prefix_len, + w->kcontrols[i].name); break; case snd_soc_dapm_mixer_named_ctl: snprintf(path->long_name, name_len, "%s", @@ -438,6 +450,7 @@ static int dapm_new_mux(struct snd_soc_dapm_context *dapm, struct snd_kcontrol *kcontrol; struct snd_card *card = dapm->card->snd_card; const char *prefix; + size_t prefix_len; int ret = 0; if (!w->num_kcontrols) { @@ -450,7 +463,17 @@ static int dapm_new_mux(struct snd_soc_dapm_context *dapm, else prefix = NULL; - kcontrol = snd_soc_cnew(&w->kcontrols[0], w, w->name, prefix); + if (prefix) + prefix_len = strlen(prefix) + 1; + else + prefix_len = 0; + + /* The control will get a prefix from the control creation + * process but we're also using the same prefix for widgets so + * cut the prefix off the front of the widget name. + */ + kcontrol = snd_soc_cnew(&w->kcontrols[0], w, w->name + prefix_len, + prefix); ret = snd_ctl_add(card, kcontrol); if (ret < 0) |