From: Mark Brown <broonie@opensource.wolfsonmicro.com>
Date: Tue, 4 Oct 2011 21:43:31 +0000 (+0100)
Subject: ASoC: Don't mark the outputs of supplies as dirty on state changes
X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=f3bf3e456a8be9b359a8f4ff458ae1be4fc4c516;p=GitHub%2Fexynos8895%2Fandroid_kernel_samsung_universal8895.git

ASoC: Don't mark the outputs of supplies as dirty on state changes

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@opensource.wolfsonmicro.com>
---

diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c
index c39146d435e2..cbca1ddb6619 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)