ASoC: Allow WM8903 mic detect disable and don't force bias on
authorMark Brown <broonie@opensource.wolfsonmicro.com>
Mon, 22 Mar 2010 16:37:01 +0000 (16:37 +0000)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Mon, 22 Mar 2010 17:22:56 +0000 (17:22 +0000)
Don't force enable the microphone bias on WM8903 when doing jack
detection, and don't force enable microphone bias. This allows
platforms to only enable microphone detection when a jack has been
inserted.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Acked-by: Liam Girdwood <lrg@slimlogic.co.uk>
sound/soc/codecs/wm8903.c

index b5427b47d6fd358d8054a82c99f1c54341003070..134b17532f23b23a1fa932f5a0e8dbf1287f4e86 100644 (file)
@@ -1465,7 +1465,7 @@ int wm8903_mic_detect(struct snd_soc_codec *codec, struct snd_soc_jack *jack,
                      int det, int shrt)
 {
        struct wm8903_priv *wm8903 = codec->private_data;
-       int irq_mask = 0;
+       int irq_mask = WM8903_MICDET_EINT | WM8903_MICSHRT_EINT;
 
        dev_dbg(codec->dev, "Enabling microphone detection: %x %x\n",
                det, shrt);
@@ -1485,16 +1485,17 @@ int wm8903_mic_detect(struct snd_soc_codec *codec, struct snd_soc_jack *jack,
                            WM8903_MICDET_EINT | WM8903_MICSHRT_EINT,
                            irq_mask);
 
-       /* Enable mic detection, this may not have been set through
-        * platform data (eg, if the defaults are OK). */
-       snd_soc_update_bits(codec, WM8903_WRITE_SEQUENCER_0,
-                           WM8903_WSEQ_ENA, WM8903_WSEQ_ENA);
-       snd_soc_update_bits(codec, WM8903_MIC_BIAS_CONTROL_0,
-                           WM8903_MICDET_ENA, WM8903_MICDET_ENA);
-
-       /* Force the microphone bias on; this will trigger an initial
-        * detection. */
-       snd_soc_dapm_force_enable_pin(codec, "Mic Bias");
+       if (det && shrt) {
+               /* Enable mic detection, this may not have been set through
+                * platform data (eg, if the defaults are OK). */
+               snd_soc_update_bits(codec, WM8903_WRITE_SEQUENCER_0,
+                                   WM8903_WSEQ_ENA, WM8903_WSEQ_ENA);
+               snd_soc_update_bits(codec, WM8903_MIC_BIAS_CONTROL_0,
+                                   WM8903_MICDET_ENA, WM8903_MICDET_ENA);
+       } else {
+               snd_soc_update_bits(codec, WM8903_MIC_BIAS_CONTROL_0,
+                                   WM8903_MICDET_ENA, 0);
+       }
 
        return 0;
 }