ASoC: wm8996: Put the microphone biases into bypass mode when idle
authorMark Brown <broonie@opensource.wolfsonmicro.com>
Thu, 26 Apr 2012 14:56:10 +0000 (15:56 +0100)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Thu, 26 Apr 2012 17:06:56 +0000 (18:06 +0100)
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>
sound/soc/codecs/wm8996.c

index 1fd635494045f71e44731e1abe7959b980a33b45..8af422e38fd060118968eb6f3bf62d707b32584e 100644 (file)
@@ -1770,7 +1770,13 @@ static int wm8996_set_bias_level(struct snd_soc_codec *codec,
 
        switch (level) {
        case SND_SOC_BIAS_ON:
+               break;
        case SND_SOC_BIAS_PREPARE:
+               /* Put the MICBIASes into regulating mode */
+               snd_soc_update_bits(codec, WM8996_MICBIAS_1,
+                                   WM8996_MICB1_MODE, 0);
+               snd_soc_update_bits(codec, WM8996_MICBIAS_2,
+                                   WM8996_MICB2_MODE, 0);
                break;
 
        case SND_SOC_BIAS_STANDBY:
@@ -1793,6 +1799,12 @@ static int wm8996_set_bias_level(struct snd_soc_codec *codec,
                        regcache_cache_only(codec->control_data, false);
                        regcache_sync(codec->control_data);
                }
+
+               /* Bypass the MICBIASes for lowest power */
+               snd_soc_update_bits(codec, WM8996_MICBIAS_1,
+                                   WM8996_MICB1_MODE, WM8996_MICB1_MODE);
+               snd_soc_update_bits(codec, WM8996_MICBIAS_2,
+                                   WM8996_MICB2_MODE, WM8996_MICB2_MODE);
                break;
 
        case SND_SOC_BIAS_OFF: