ASoC: wm8994: Make sure we don't have MICBIAS on during jackdet mode
authorMark Brown <broonie@opensource.wolfsonmicro.com>
Tue, 28 Feb 2012 19:03:37 +0000 (19:03 +0000)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Wed, 29 Feb 2012 10:28:59 +0000 (10:28 +0000)
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
sound/soc/codecs/wm8994.c

index 33bc718..691e897 100644 (file)
@@ -3170,9 +3170,6 @@ static void wm8958_default_micdet(u16 status, void *data)
                        snd_soc_update_bits(codec, WM8958_MIC_DETECT_1,
                                            WM8958_MICD_ENA, 0);
 
-                       wm1811_jackdet_set_mode(codec,
-                                               WM1811_JACKDET_MODE_JACK);
-
                        if (wm8994->pdata->jd_ext_cap) {
                                mutex_lock(&codec->mutex);
                                snd_soc_dapm_disable_pin(&codec->dapm,
@@ -3180,6 +3177,9 @@ static void wm8958_default_micdet(u16 status, void *data)
                                snd_soc_dapm_sync(&codec->dapm);
                                mutex_unlock(&codec->mutex);
                        }
+
+                       wm1811_jackdet_set_mode(codec,
+                                               WM1811_JACKDET_MODE_JACK);
                }
        }
 
@@ -3235,23 +3235,24 @@ static irqreturn_t wm1811_jackdet_irq(int irq, void *data)
                snd_soc_update_bits(codec, WM8958_MICBIAS2,
                                    WM8958_MICB2_DISCH, 0);
 
-               /* If required for an external cap force MICBIAS on */
-               if (wm8994->pdata->jd_ext_cap) {
-                       mutex_lock(&codec->mutex);
-                       snd_soc_dapm_force_enable_pin(&codec->dapm,
-                                                     "MICBIAS2");
-                       snd_soc_dapm_sync(&codec->dapm);
-                       mutex_unlock(&codec->mutex);
-               }
-
                /*
                 * Start off measument of microphone impedence to find
                 * out what's actually there.
                 */
                wm8994->mic_detecting = true;
                wm1811_jackdet_set_mode(codec, WM1811_JACKDET_MODE_MIC);
+
                snd_soc_update_bits(codec, WM8958_MIC_DETECT_1,
                                    WM8958_MICD_ENA, WM8958_MICD_ENA);
+
+               /* If required for an external cap force MICBIAS on */
+               if (wm8994->pdata->jd_ext_cap) {
+                       mutex_lock(&codec->mutex);
+                       snd_soc_dapm_force_enable_pin(&codec->dapm,
+                                                     "MICBIAS2");
+                       snd_soc_dapm_sync(&codec->dapm);
+                       mutex_unlock(&codec->mutex);
+               }
        } else {
                dev_dbg(codec->dev, "Jack not detected\n");