ASoC: wm8994: VMID management improvements
authorMark Brown <broonie@opensource.wolfsonmicro.com>
Sat, 11 Feb 2012 23:09:53 +0000 (23:09 +0000)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Sat, 11 Feb 2012 23:11:21 +0000 (23:11 +0000)
Raise the ramp time to 50ms to cover corner cases, use the startup bias
generator, explicitly reset the ramp circuit when complete and reorder
things all of which should improve performance somewhat for systems that
are sensitive to noise from VMID.

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

index 21931a0c7cea7bd11570efdcd102e0f8b0fd70b0..aa94ca1f6a9b673ae6108a74977ce954de786c5f 100644 (file)
@@ -778,29 +778,37 @@ static void vmid_reference(struct snd_soc_codec *codec)
                wm8994->vmid_refcount);
 
        if (wm8994->vmid_refcount == 1) {
+               snd_soc_update_bits(codec, WM8994_ANTIPOP_1,
+                                   WM8994_LINEOUT_VMID_BUF_ENA |
+                                   WM8994_LINEOUT1_DISCH |
+                                   WM8994_LINEOUT2_DISCH,
+                                   WM8994_LINEOUT_VMID_BUF_ENA);
+
                /* Startup bias, VMID ramp & buffer */
                snd_soc_update_bits(codec, WM8994_ANTIPOP_2,
+                                   WM8994_BIAS_SRC |
+                                   WM8994_VMID_DISCH |
                                    WM8994_STARTUP_BIAS_ENA |
                                    WM8994_VMID_BUF_ENA |
                                    WM8994_VMID_RAMP_MASK,
+                                   WM8994_BIAS_SRC |
                                    WM8994_STARTUP_BIAS_ENA |
                                    WM8994_VMID_BUF_ENA |
                                    (0x3 << WM8994_VMID_RAMP_SHIFT));
 
                wm_hubs_vmid_ena(codec);
 
-               /* Remove discharge for line out */
-               snd_soc_update_bits(codec, WM8994_ANTIPOP_1,
-                                   WM8994_LINEOUT1_DISCH |
-                                   WM8994_LINEOUT2_DISCH, 0);
-
                /* Main bias enable, VMID=2x40k */
                snd_soc_update_bits(codec, WM8994_POWER_MANAGEMENT_1,
                                    WM8994_BIAS_ENA |
                                    WM8994_VMID_SEL_MASK,
                                    WM8994_BIAS_ENA | 0x2);
 
-               msleep(20);
+               msleep(50);
+
+               snd_soc_update_bits(codec, WM8994_ANTIPOP_2,
+                                   WM8994_VMID_RAMP_MASK | WM8994_BIAS_SRC,
+                                   0);
        }
 }