[alsa-devel] [PATCH 3/4] ASoC: Don't mark the outputs of supplies as dirty on state changes

Mark Brown broonie at opensource.wolfsonmicro.com
Wed Oct 5 00:01:24 CEST 2011


The whole point of supply widgets is that they aren't inputs to their
sinks so a state change in a supply should never affect the state of the
widget being supplied and we don't need to mark them as dirty.

           Power    Path   Neighbour
Before:    69       727    905
After:     63       607    731

This is particularly useful where supplies affect large portions of the
chip (eg, a bandgap supplying the analogue sections).

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

diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c
index c39146d..cbca1dd 100644
--- a/sound/soc/soc-dapm.c
+++ b/sound/soc/soc-dapm.c
@@ -1260,11 +1260,18 @@ static void dapm_widget_set_power(struct snd_soc_dapm_widget *w, bool power,
 						   path->connect);
 		}
 	}
-	list_for_each_entry(path, &w->sinks, list_source) {
-		if (path->sink) {
-			dapm_widget_set_peer_power(path->sink, power,
-						   path->connect);
+	switch (w->id) {
+	case snd_soc_dapm_supply:
+		/* Supplies can't affect their outputs, only their inputs */
+		break;
+	default:
+		list_for_each_entry(path, &w->sinks, list_source) {
+			if (path->sink) {
+				dapm_widget_set_peer_power(path->sink, power,
+							   path->connect);
+			}
 		}
+		break;
 	}
 
 	if (power)
-- 
1.7.6.3



More information about the Alsa-devel mailing list