ASoC: Manage VMID mode for WM8990
authorMark Brown <broonie@opensource.wolfsonmicro.com>
Mon, 17 Nov 2008 17:11:14 +0000 (17:11 +0000)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Mon, 17 Nov 2008 17:26:51 +0000 (17:26 +0000)
A small additional power saving can be achieved for the WM8990 by
maintaining VMID using a 2*250k divider when in standby mode.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
sound/soc/codecs/wm8990.c

index 938e1542920784795325ff8740e09018203e8b98..2d7b0096d92911f4103edbe71e81cf0c34d20d9f 100644 (file)
@@ -1222,8 +1222,14 @@ static int wm8990_set_bias_level(struct snd_soc_codec *codec,
        switch (level) {
        case SND_SOC_BIAS_ON:
                break;
+
        case SND_SOC_BIAS_PREPARE:
+               /* VMID=2*50k */
+               val = wm8990_read_reg_cache(codec, WM8990_POWER_MANAGEMENT_1) &
+                       ~WM8990_VMID_MODE_MASK;
+               wm8990_write(codec, WM8990_POWER_MANAGEMENT_1, val | 0x2);
                break;
+
        case SND_SOC_BIAS_STANDBY:
                if (codec->bias_level == SND_SOC_BIAS_OFF) {
                        /* Enable all output discharge bits */
@@ -1278,6 +1284,11 @@ static int wm8990_set_bias_level(struct snd_soc_codec *codec,
                        wm8990_write(codec, WM8990_EXT_CTL1, 0xa003);
                        wm8990_write(codec, WM8990_EXT_ACCESS_ENA, 0);
                }
+
+               /* VMID=2*250k */
+               val = wm8990_read_reg_cache(codec, WM8990_POWER_MANAGEMENT_1) &
+                       ~WM8990_VMID_MODE_MASK;
+               wm8990_write(codec, WM8990_POWER_MANAGEMENT_1, val | 0x4);
                break;
 
        case SND_SOC_BIAS_OFF: