Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 283765
b: refs/heads/master
c: 1633281
h: refs/heads/master
i:
  283763: c3f0caa
v: v3
  • Loading branch information
Stephen Warren authored and Mark Brown committed Nov 23, 2011
1 parent 2160f65 commit 493a743
Show file tree
Hide file tree
Showing 5 changed files with 80 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: d4a2eca781bfd7323bfd98dbc7fd63c7d613fef2
refs/heads/master: 1633281b79fd276f1c7c2fb37c3b97da74e42ae5
1 change: 1 addition & 0 deletions trunk/include/sound/soc-dapm.h
Original file line number Diff line number Diff line change
Expand Up @@ -380,6 +380,7 @@ int snd_soc_dapm_force_enable_pin(struct snd_soc_dapm_context *dapm,
const char *pin);
int snd_soc_dapm_ignore_suspend(struct snd_soc_dapm_context *dapm,
const char *pin);
void snd_soc_dapm_auto_nc_codec_pins(struct snd_soc_codec *codec);

/* Mostly internal - should not normally be used */
void dapm_mark_dirty(struct snd_soc_dapm_widget *w, const char *reason);
Expand Down
1 change: 1 addition & 0 deletions trunk/include/sound/soc.h
Original file line number Diff line number Diff line change
Expand Up @@ -815,6 +815,7 @@ struct snd_soc_card {
int num_dapm_widgets;
const struct snd_soc_dapm_route *dapm_routes;
int num_dapm_routes;
bool fully_routed;

struct work_struct deferred_resume_work;

Expand Down
4 changes: 4 additions & 0 deletions trunk/sound/soc/soc-core.c
Original file line number Diff line number Diff line change
Expand Up @@ -1488,6 +1488,10 @@ static void snd_soc_instantiate_card(struct snd_soc_card *card)

snd_soc_dapm_new_widgets(&card->dapm);

if (card->fully_routed)
list_for_each_entry(codec, &codec_list, list)
snd_soc_dapm_auto_nc_codec_pins(codec);

ret = snd_card_register(card->snd_card);
if (ret < 0) {
printk(KERN_ERR "asoc: failed to register soundcard for %s\n", card->name);
Expand Down
73 changes: 73 additions & 0 deletions trunk/sound/soc/soc-dapm.c
Original file line number Diff line number Diff line change
Expand Up @@ -2947,6 +2947,79 @@ int snd_soc_dapm_ignore_suspend(struct snd_soc_dapm_context *dapm,
}
EXPORT_SYMBOL_GPL(snd_soc_dapm_ignore_suspend);

static bool snd_soc_dapm_widget_in_card_paths(struct snd_soc_card *card,
struct snd_soc_dapm_widget *w)
{
struct snd_soc_dapm_path *p;

list_for_each_entry(p, &card->paths, list) {
if ((p->source == w) || (p->sink == w)) {
dev_dbg(card->dev,
"... Path %s(id:%d dapm:%p) - %s(id:%d dapm:%p)\n",
p->source->name, p->source->id, p->source->dapm,
p->sink->name, p->sink->id, p->sink->dapm);

/* Connected to something other than the codec */
if (p->source->dapm != p->sink->dapm)
return true;
/*
* Loopback connection from codec external pin to
* codec external pin
*/
if (p->sink->id == snd_soc_dapm_input) {
switch (p->source->id) {
case snd_soc_dapm_output:
case snd_soc_dapm_micbias:
return true;
default:
break;
}
}
}
}

return false;
}

/**
* snd_soc_dapm_auto_nc_codec_pins - call snd_soc_dapm_nc_pin for unused pins
* @codec: The codec whose pins should be processed
*
* Automatically call snd_soc_dapm_nc_pin() for any external pins in the codec
* which are unused. Pins are used if they are connected externally to the
* codec, whether that be to some other device, or a loop-back connection to
* the codec itself.
*/
void snd_soc_dapm_auto_nc_codec_pins(struct snd_soc_codec *codec)
{
struct snd_soc_card *card = codec->card;
struct snd_soc_dapm_context *dapm = &codec->dapm;
struct snd_soc_dapm_widget *w;

dev_dbg(card->dev, "Auto NC: DAPMs: card:%p codec:%p\n",
&card->dapm, &codec->dapm);

list_for_each_entry(w, &card->widgets, list) {
if (w->dapm != dapm)
continue;
switch (w->id) {
case snd_soc_dapm_input:
case snd_soc_dapm_output:
case snd_soc_dapm_micbias:
dev_dbg(card->dev, "Auto NC: Checking widget %s\n",
w->name);
if (!snd_soc_dapm_widget_in_card_paths(card, w)) {
dev_dbg(card->dev,
"... Not in map; disabling\n");
snd_soc_dapm_nc_pin(dapm, w->name);
}
break;
default:
break;
}
}
}

/**
* snd_soc_dapm_free - free dapm resources
* @dapm: DAPM context
Expand Down

0 comments on commit 493a743

Please sign in to comment.