ASoC: snd_soc_dapm_get_pin_status: Match other contexts too
authorStephen Warren <swarren@nvidia.com>
Tue, 19 Apr 2011 21:25:11 +0000 (15:25 -0600)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Wed, 20 Apr 2011 12:50:06 +0000 (13:50 +0100)
Not all widgets on a card are within the codec's DAPM context. Fix
snd_soc_dapm_get_pin_status to search all contexts when looking for a
widget.

This change is required when modifying tegra_wm8903 to use
snd_soc_card.widgets rather than calling snd_soc_dapm_new_controls; the
former adds the widgets to the card's DAPM context, whereas tegra_wm8903
uses the codec's DAPM context when calling snd_soc_dapm_new_controls.

By code inspection, I suspect this also applies to Samsung Speyside.

Signed-off-by: Stephen Warren <swarren@nvidia.com>
Acked-by: Liam Girdwood <lrg@ti.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
sound/soc/soc-dapm.c

index 2ee738c08ca4a0e29d3046e3283e4e9b498d4dc1..4c868f9087f41817ed13395e40008172944249cd 100644 (file)
@@ -2403,6 +2403,12 @@ int snd_soc_dapm_get_pin_status(struct snd_soc_dapm_context *dapm,
                        return w->connected;
        }
 
+       /* Try again in other contexts */
+       list_for_each_entry(w, &dapm->card->widgets, list) {
+               if (!strcmp(w->name, pin))
+                       return w->connected;
+       }
+
        return 0;
 }
 EXPORT_SYMBOL_GPL(snd_soc_dapm_get_pin_status);