Commit 7df37884 authored by Lars-Peter Clausen's avatar Lars-Peter Clausen Committed by Mark Brown

ASoC: Auto disconnect pins from all DAPM contexts

Currently only pins in CODEC DAPM contexts are automatically marked as
non-connected if the card has the fully_routed flag set. This makes sense since
widgets which qualify for auto-disconnection are only found in CODEC DAPM
contexts. But with componentisation this is going to change, so consider all
widgets for auto-disconnection.

Also it is probably faster to walk the widgets list only once rather than once
for each CODEC.
Signed-off-by: default avatarLars-Peter Clausen <lars@metafoo.de>
Signed-off-by: default avatarMark Brown <broonie@linaro.org>
parent bb13109d
...@@ -431,7 +431,7 @@ int snd_soc_dapm_force_enable_pin_unlocked(struct snd_soc_dapm_context *dapm, ...@@ -431,7 +431,7 @@ int snd_soc_dapm_force_enable_pin_unlocked(struct snd_soc_dapm_context *dapm,
const char *pin); const char *pin);
int snd_soc_dapm_ignore_suspend(struct snd_soc_dapm_context *dapm, int snd_soc_dapm_ignore_suspend(struct snd_soc_dapm_context *dapm,
const char *pin); const char *pin);
void snd_soc_dapm_auto_nc_codec_pins(struct snd_soc_codec *codec); void snd_soc_dapm_auto_nc_pins(struct snd_soc_card *card);
/* Mostly internal - should not normally be used */ /* Mostly internal - should not normally be used */
void dapm_mark_io_dirty(struct snd_soc_dapm_context *dapm); void dapm_mark_io_dirty(struct snd_soc_dapm_context *dapm);
......
...@@ -1928,8 +1928,7 @@ static int snd_soc_instantiate_card(struct snd_soc_card *card) ...@@ -1928,8 +1928,7 @@ static int snd_soc_instantiate_card(struct snd_soc_card *card)
} }
if (card->fully_routed) if (card->fully_routed)
list_for_each_entry(codec, &card->codec_dev_list, card_list) snd_soc_dapm_auto_nc_pins(card);
snd_soc_dapm_auto_nc_codec_pins(codec);
snd_soc_dapm_new_widgets(card); snd_soc_dapm_new_widgets(card);
......
...@@ -3763,36 +3763,31 @@ static bool snd_soc_dapm_widget_in_card_paths(struct snd_soc_card *card, ...@@ -3763,36 +3763,31 @@ static bool snd_soc_dapm_widget_in_card_paths(struct snd_soc_card *card,
} }
/** /**
* snd_soc_dapm_auto_nc_codec_pins - call snd_soc_dapm_nc_pin for unused pins * snd_soc_dapm_auto_nc_pins - call snd_soc_dapm_nc_pin for unused pins
* @codec: The codec whose pins should be processed * @card: The card whose pins should be processed
* *
* Automatically call snd_soc_dapm_nc_pin() for any external pins in the codec * Automatically call snd_soc_dapm_nc_pin() for any external pins in the card
* which are unused. Pins are used if they are connected externally to the * which are unused. Pins are used if they are connected externally to a
* codec, whether that be to some other device, or a loop-back connection to * component, whether that be to some other device, or a loop-back connection to
* the codec itself. * the component itself.
*/ */
void snd_soc_dapm_auto_nc_codec_pins(struct snd_soc_codec *codec) void snd_soc_dapm_auto_nc_pins(struct snd_soc_card *card)
{ {
struct snd_soc_card *card = codec->card;
struct snd_soc_dapm_context *dapm = &codec->dapm;
struct snd_soc_dapm_widget *w; struct snd_soc_dapm_widget *w;
dev_dbg(codec->dev, "ASoC: Auto NC: DAPMs: card:%p codec:%p\n", dev_dbg(card->dev, "ASoC: Auto NC: DAPMs: card:%p\n", &card->dapm);
&card->dapm, &codec->dapm);
list_for_each_entry(w, &card->widgets, list) { list_for_each_entry(w, &card->widgets, list) {
if (w->dapm != dapm)
continue;
switch (w->id) { switch (w->id) {
case snd_soc_dapm_input: case snd_soc_dapm_input:
case snd_soc_dapm_output: case snd_soc_dapm_output:
case snd_soc_dapm_micbias: case snd_soc_dapm_micbias:
dev_dbg(codec->dev, "ASoC: Auto NC: Checking widget %s\n", dev_dbg(card->dev, "ASoC: Auto NC: Checking widget %s\n",
w->name); w->name);
if (!snd_soc_dapm_widget_in_card_paths(card, w)) { if (!snd_soc_dapm_widget_in_card_paths(card, w)) {
dev_dbg(codec->dev, dev_dbg(card->dev,
"... Not in map; disabling\n"); "... Not in map; disabling\n");
snd_soc_dapm_nc_pin(dapm, w->name); snd_soc_dapm_nc_pin(w->dapm, w->name);
} }
break; break;
default: default:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment