diff options
Diffstat (limited to 'sound/soc/soc-dapm.c')
-rw-r--r-- | sound/soc/soc-dapm.c | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c index 653435930ad8..b9129efeedf3 100644 --- a/sound/soc/soc-dapm.c +++ b/sound/soc/soc-dapm.c | |||
@@ -2032,6 +2032,35 @@ void snd_soc_dapm_free(struct snd_soc_device *socdev) | |||
2032 | } | 2032 | } |
2033 | EXPORT_SYMBOL_GPL(snd_soc_dapm_free); | 2033 | EXPORT_SYMBOL_GPL(snd_soc_dapm_free); |
2034 | 2034 | ||
2035 | /* | ||
2036 | * snd_soc_dapm_shutdown - callback for system shutdown | ||
2037 | */ | ||
2038 | void snd_soc_dapm_shutdown(struct snd_soc_device *socdev) | ||
2039 | { | ||
2040 | struct snd_soc_codec *codec = socdev->card->codec; | ||
2041 | struct snd_soc_dapm_widget *w; | ||
2042 | LIST_HEAD(down_list); | ||
2043 | int powerdown = 0; | ||
2044 | |||
2045 | list_for_each_entry(w, &codec->dapm_widgets, list) { | ||
2046 | if (w->power) { | ||
2047 | dapm_seq_insert(w, &down_list, dapm_down_seq); | ||
2048 | powerdown = 1; | ||
2049 | } | ||
2050 | } | ||
2051 | |||
2052 | /* If there were no widgets to power down we're already in | ||
2053 | * standby. | ||
2054 | */ | ||
2055 | if (powerdown) { | ||
2056 | snd_soc_dapm_set_bias_level(socdev, SND_SOC_BIAS_PREPARE); | ||
2057 | dapm_seq_run(codec, &down_list, 0, dapm_down_seq); | ||
2058 | snd_soc_dapm_set_bias_level(socdev, SND_SOC_BIAS_STANDBY); | ||
2059 | } | ||
2060 | |||
2061 | snd_soc_dapm_set_bias_level(socdev, SND_SOC_BIAS_OFF); | ||
2062 | } | ||
2063 | |||
2035 | /* Module information */ | 2064 | /* Module information */ |
2036 | MODULE_AUTHOR("Liam Girdwood, lrg@slimlogic.co.uk"); | 2065 | MODULE_AUTHOR("Liam Girdwood, lrg@slimlogic.co.uk"); |
2037 | MODULE_DESCRIPTION("Dynamic Audio Power Management core for ALSA SoC"); | 2066 | MODULE_DESCRIPTION("Dynamic Audio Power Management core for ALSA SoC"); |