ASoC: Allow DAPM pin operations to match any context
[linux-2.6.git] / sound / soc / soc-dapm.c
index 6887920..2ee738c 100644 (file)
@@ -1477,6 +1477,19 @@ static int snd_soc_dapm_set_pin(struct snd_soc_dapm_context *dapm,
                }
        }
 
+       /* Try again in other contexts */
+       list_for_each_entry(w, &dapm->card->widgets, list) {
+               if (!strcmp(w->name, pin)) {
+                       dev_dbg(w->dapm->dev, "dapm: pin %s = %d\n",
+                               pin, status);
+                       w->connected = status;
+                       /* Allow disabling of forced pins */
+                       if (status == 0)
+                               w->force = 0;
+                       return 0;
+               }
+       }
+
        dev_err(dapm->dev, "dapm: unknown pin %s\n", pin);
        return -EINVAL;
 }
@@ -2317,6 +2330,17 @@ int snd_soc_dapm_force_enable_pin(struct snd_soc_dapm_context *dapm,
                }
        }
 
+       /* Try again with other contexts */
+       list_for_each_entry(w, &dapm->card->widgets, list) {
+               if (!strcmp(w->name, pin)) {
+                       dev_dbg(w->dapm->dev,
+                               "dapm: force enable pin %s\n", pin);
+                       w->connected = 1;
+                       w->force = 1;
+                       return 0;
+               }
+       }
+
        dev_err(dapm->dev, "dapm: unknown pin %s\n", pin);
        return -EINVAL;
 }