diff options
author | Ingo Molnar <mingo@elte.hu> | 2011-03-04 10:40:22 +0100 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2011-03-04 10:40:25 +0100 |
commit | 888a8a3e9d79cbb9d83e53955f684998248580ec (patch) | |
tree | 3dbf548438c77d89c8696a9a79c4129cdc2f3d3e /sound/soc/soc-dapm.c | |
parent | cfff2d909cbdaf8c467bd321aa0502a548ec8f7e (diff) | |
parent | b06b3d49699a52e8f9ca056c4f96e81b1987d78e (diff) |
Merge branch 'perf/urgent' into perf/core
Merge reason: Pick up updates before queueing up dependent patches.
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'sound/soc/soc-dapm.c')
-rw-r--r-- | sound/soc/soc-dapm.c | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c index 8194f150bab..25e54230cc6 100644 --- a/sound/soc/soc-dapm.c +++ b/sound/soc/soc-dapm.c @@ -712,7 +712,15 @@ static int dapm_supply_check_power(struct snd_soc_dapm_widget *w) !path->connected(path->source, path->sink)) continue; - if (path->sink && path->sink->power_check && + if (!path->sink) + continue; + + if (path->sink->force) { + power = 1; + break; + } + + if (path->sink->power_check && path->sink->power_check(path->sink)) { power = 1; break; @@ -1627,6 +1635,7 @@ EXPORT_SYMBOL_GPL(snd_soc_dapm_add_routes); int snd_soc_dapm_new_widgets(struct snd_soc_dapm_context *dapm) { struct snd_soc_dapm_widget *w; + unsigned int val; list_for_each_entry(w, &dapm->card->widgets, list) { @@ -1675,6 +1684,18 @@ int snd_soc_dapm_new_widgets(struct snd_soc_dapm_context *dapm) case snd_soc_dapm_post: break; } + + /* Read the initial power state from the device */ + if (w->reg >= 0) { + val = snd_soc_read(w->codec, w->reg); + val &= 1 << w->shift; + if (w->invert) + val = !val; + + if (val) + w->power = 1; + } + w->new = 1; } |