ASoC: dapm: Make enable/disable_pin work with always on widgets
authorCharles Keepax <ckeepax@opensource.wolfsonmicro.com>
Wed, 2 Dec 2015 10:22:16 +0000 (10:22 +0000)
committerMark Brown <broonie@kernel.org>
Wed, 2 Dec 2015 12:12:21 +0000 (12:12 +0000)
Always on widgets currently have some odd interactions with DAPM.
Enabling/disabling a widget (snd_soc_dapm_enable_pin) then connecting
it to a path works as expected, ie. when the widget is disabled the
path doesn't power up and it does when the widget is enabled. However
once in a path enabling the widget does not cause anything to power
up, dapm_widget_set_power will return the current power state of the
widget as 1, meaning we never check peer power states.

This patch updates dapm_always_on_check_power to return w->connected
such that it is effected by snd_soc_dapm_enable_pin and the like.

Signed-off-by: Charles Keepax <ckeepax@opensource.wolfsonmicro.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/soc-dapm.c

index 6760044f6aae8e9d3f19cc41d35b44110b3f7e52..4ecacdcba4847c96faa57bde3086189d72dbff6c 100644 (file)
@@ -1300,7 +1300,7 @@ static int dapm_supply_check_power(struct snd_soc_dapm_widget *w)
 
 static int dapm_always_on_check_power(struct snd_soc_dapm_widget *w)
 {
-       return 1;
+       return w->connected;
 }
 
 static int dapm_seq_compare(struct snd_soc_dapm_widget *a,