aboutsummaryrefslogtreecommitdiffstats
path: root/sound/soc/soc-dapm.c
diff options
context:
space:
mode:
Diffstat (limited to 'sound/soc/soc-dapm.c')
-rw-r--r--sound/soc/soc-dapm.c29
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}
2033EXPORT_SYMBOL_GPL(snd_soc_dapm_free); 2033EXPORT_SYMBOL_GPL(snd_soc_dapm_free);
2034 2034
2035/*
2036 * snd_soc_dapm_shutdown - callback for system shutdown
2037 */
2038void 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 */
2036MODULE_AUTHOR("Liam Girdwood, lrg@slimlogic.co.uk"); 2065MODULE_AUTHOR("Liam Girdwood, lrg@slimlogic.co.uk");
2037MODULE_DESCRIPTION("Dynamic Audio Power Management core for ALSA SoC"); 2066MODULE_DESCRIPTION("Dynamic Audio Power Management core for ALSA SoC");