ASoC: wm_hubs: Clamp inputs to VMID while we ramp
authorMark Brown <broonie@opensource.wolfsonmicro.com>
Fri, 10 Feb 2012 18:09:42 +0000 (18:09 +0000)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Sat, 11 Feb 2012 23:11:21 +0000 (23:11 +0000)
Reduces the amount of time taken to stabilise them.

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

index 2184617b96117bfabac14cc7411eb24d2dadb317..4478b40c86e3191ccdad133c33b2d0b1f17272b7 100644 (file)
@@ -31,6 +31,7 @@
 #define WM8993_GPIO_CTRL_1                      0x12
 #define WM8993_GPIO1                            0x13
 #define WM8993_IRQ_DEBOUNCE                     0x14
+#define WM8993_INPUTS_CLAMP_REG                        0x15
 #define WM8993_GPIOCTRL_2                       0x16
 #define WM8993_GPIO_POL                         0x17
 #define WM8993_LEFT_LINE_INPUT_1_2_VOLUME       0x18
 #define WM8993_GPIO1_DB_SHIFT                        0  /* GPIO1_DB */
 #define WM8993_GPIO1_DB_WIDTH                        1  /* GPIO1_DB */
 
+/*
+ * R21 (0x15) - Inputs Clamp
+ */
+#define WM8993_INPUTS_CLAMP                     0x0040  /* INPUTS_CLAMP */
+#define WM8993_INPUTS_CLAMP_MASK                0x0040  /* INPUTS_CLAMP */
+#define WM8993_INPUTS_CLAMP_SHIFT                    7  /* INPUTS_CLAMP */
+#define WM8993_INPUTS_CLAMP_WIDTH                    1  /* INPUTS_CLAMP */
+
 /*
  * R22 (0x16) - GPIOCTRL 2
  */
index f7650c5cc5c21d9e451caa3d6c09375f0d64c13e..9742c666cd0ad89b8474715bbb2f1092055464b6 100644 (file)
@@ -1040,6 +1040,12 @@ void wm_hubs_set_bias_level(struct snd_soc_codec *codec,
        int val;
 
        switch (level) {
+       case SND_SOC_BIAS_STANDBY:
+               /* Clamp the inputs to VMID while we ramp to charge caps */
+               snd_soc_update_bits(codec, WM8993_INPUTS_CLAMP_REG,
+                                   WM8993_INPUTS_CLAMP, WM8993_INPUTS_CLAMP);
+               break;
+
        case SND_SOC_BIAS_ON:
                /* Turn off any unneded single ended outputs */
                val = 0;
@@ -1067,6 +1073,10 @@ void wm_hubs_set_bias_level(struct snd_soc_codec *codec,
                    !hubs->lineout2n_ena && !hubs->lineout2p_ena)
                        snd_soc_update_bits(codec, WM8993_ANTIPOP1,
                                            WM8993_LINEOUT_VMID_BUF_ENA, 0);
+
+               /* Remove the input clamps */
+               snd_soc_update_bits(codec, WM8993_INPUTS_CLAMP_REG,
+                                   WM8993_INPUTS_CLAMP, 0);
                break;
 
        default: