ASoC: dapm: use component prefix when checking widget names
authorShuming Fan <shumingf@realtek.com>
Mon, 8 Feb 2021 23:40:42 +0000 (17:40 -0600)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 6 Oct 2021 13:56:02 +0000 (15:56 +0200)
commit ae4fc532244b3bb4d86c397418d980b0c6be1dfd upstream.

On a TigerLake SoundWire platform, we see these warnings:

[   27.360086] rt5682 sdw:0:25d:5682:0: ASoC: DAPM unknown pin MICBIAS
[   27.360092] rt5682 sdw:0:25d:5682:0: ASoC: DAPM unknown pin Vref2

This is root-caused to the addition of a component prefix in the
machine driver. The tests in soc-dapm should account for a prefix
instead of reporting an invalid issue.

Reported-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Reviewed-by: Rander Wang <rander.wang@linux.intel.com>
Signed-off-by: Shuming Fan <shumingf@realtek.com>
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Link: https://lore.kernel.org/r/20210208234043.59750-2-pierre-louis.bossart@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Robert Lee <lerobert@google.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
sound/soc/soc-dapm.c

index 148c095..f4b380d 100644 (file)
@@ -2528,9 +2528,20 @@ static struct snd_soc_dapm_widget *dapm_find_widget(
 {
        struct snd_soc_dapm_widget *w;
        struct snd_soc_dapm_widget *fallback = NULL;
+       char prefixed_pin[80];
+       const char *pin_name;
+       const char *prefix = soc_dapm_prefix(dapm);
+
+       if (prefix) {
+               snprintf(prefixed_pin, sizeof(prefixed_pin), "%s %s",
+                        prefix, pin);
+               pin_name = prefixed_pin;
+       } else {
+               pin_name = pin;
+       }
 
        for_each_card_widgets(dapm->card, w) {
-               if (!strcmp(w->name, pin)) {
+               if (!strcmp(w->name, pin_name)) {
                        if (w->dapm == dapm)
                                return w;
                        else