[alsa-devel] [PATCH] ASoC: Force all DAPM contexts into the same bias state

Mark Brown broonie at opensource.wolfsonmicro.com
Fri Apr 8 02:44:54 CEST 2011

Currently we allow all DAPM contexts to determine their own bias level.
While this should in general work in most situations and will deliver the
lowest possible power it causes problems for our integration with the
card bias level as we're calling the card bias level functions for each
DAPM context even though they're card wide but don't say which CODEC
we're calling for. Mitigate against this by forcing everything to be in
the same state.

Signed-off-by: Mark Brown <broonie at opensource.wolfsonmicro.com>
 sound/soc/soc-dapm.c |    9 +++++++++
 1 files changed, 9 insertions(+), 0 deletions(-)

diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c
index b193a95..14dbba7 100644
--- a/sound/soc/soc-dapm.c
+++ b/sound/soc/soc-dapm.c
@@ -1101,6 +1101,15 @@ static int dapm_power_widgets(struct snd_soc_dapm_context *dapm, int event)
+	/* Force all contexts in the card to the same bias state */
+	power = 0;
+	list_for_each_entry(d, &card->dapm_list, list)
+		if (d->dev_power)
+			power = 1;
+	list_for_each_entry(d, &card->dapm_list, list)
+		d->dev_power = power;
 	/* Run all the bias changes in parallel */
 	list_for_each_entry(d, &dapm->card->dapm_list, list)
 		async_schedule_domain(dapm_pre_sequence_async, d,

More information about the Alsa-devel mailing list