Skip to content

Commit

Permalink
ASoC: Allow DAPM pin operations to match any context
Browse files Browse the repository at this point in the history
The DAPM pin operations currently require that the specific DAPM context
that the pin being operated in is contained in be specified. With multi
component and especially with the addition of a per-card DAPM context
this isn't ideal as it means that things like disabling unused pins on
CODECs require looking up the CODEC DAPM context.

Fix this by falling back to matching a widget in any context if there isn't
a match in the current context. The code isn't ideal currently but will do
the job.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Acked-by: Liam Girdwood <lrg@ti.com>
  • Loading branch information
Mark Brown committed Apr 9, 2011
1 parent 52ba67b commit 0d86733
Showing 1 changed file with 24 additions and 0 deletions.
24 changes: 24 additions & 0 deletions sound/soc/soc-dapm.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down Expand Up @@ -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;
}
Expand Down

0 comments on commit 0d86733

Please sign in to comment.