aboutsummaryrefslogtreecommitdiffstats
path: root/sound/soc/codecs/wm8996.c
diff options
context:
space:
mode:
authorMark Brown <broonie@opensource.wolfsonmicro.com>2012-04-26 10:56:10 -0400
committerMark Brown <broonie@opensource.wolfsonmicro.com>2012-04-26 13:06:56 -0400
commit501bf0354df9348dcd199d7f6f57c13fed7a45cb (patch)
tree27c22c6a4a448f9522c3512d26ebd2b134842d08 /sound/soc/codecs/wm8996.c
parentbe3f3f2ce6029d622d158de4274f86e3b47c9c03 (diff)
ASoC: wm8996: Put the microphone biases into bypass mode when idle
When we're not actively doing audio we don't need the microphone biases to be regulated, noise is not important when we are not looking at the audio signal. Save some power by putting the MICBIAS regulators into bypass mode when not doing audio. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Diffstat (limited to 'sound/soc/codecs/wm8996.c')
-rw-r--r--sound/soc/codecs/wm8996.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/sound/soc/codecs/wm8996.c b/sound/soc/codecs/wm8996.c
index 1fd635494045..8af422e38fd0 100644
--- a/sound/soc/codecs/wm8996.c
+++ b/sound/soc/codecs/wm8996.c
@@ -1770,7 +1770,13 @@ static int wm8996_set_bias_level(struct snd_soc_codec *codec,
1770 1770
1771 switch (level) { 1771 switch (level) {
1772 case SND_SOC_BIAS_ON: 1772 case SND_SOC_BIAS_ON:
1773 break;
1773 case SND_SOC_BIAS_PREPARE: 1774 case SND_SOC_BIAS_PREPARE:
1775 /* Put the MICBIASes into regulating mode */
1776 snd_soc_update_bits(codec, WM8996_MICBIAS_1,
1777 WM8996_MICB1_MODE, 0);
1778 snd_soc_update_bits(codec, WM8996_MICBIAS_2,
1779 WM8996_MICB2_MODE, 0);
1774 break; 1780 break;
1775 1781
1776 case SND_SOC_BIAS_STANDBY: 1782 case SND_SOC_BIAS_STANDBY:
@@ -1793,6 +1799,12 @@ static int wm8996_set_bias_level(struct snd_soc_codec *codec,
1793 regcache_cache_only(codec->control_data, false); 1799 regcache_cache_only(codec->control_data, false);
1794 regcache_sync(codec->control_data); 1800 regcache_sync(codec->control_data);
1795 } 1801 }
1802
1803 /* Bypass the MICBIASes for lowest power */
1804 snd_soc_update_bits(codec, WM8996_MICBIAS_1,
1805 WM8996_MICB1_MODE, WM8996_MICB1_MODE);
1806 snd_soc_update_bits(codec, WM8996_MICBIAS_2,
1807 WM8996_MICB2_MODE, WM8996_MICB2_MODE);
1796 break; 1808 break;
1797 1809
1798 case SND_SOC_BIAS_OFF: 1810 case SND_SOC_BIAS_OFF: