|
@@ -3505,6 +3505,7 @@ static irqreturn_t wm8994_mic_irq(int irq, void *data)
|
|
|
return IRQ_HANDLED;
|
|
|
}
|
|
|
|
|
|
+/* Should be called with accdet_lock held */
|
|
|
static void wm1811_micd_stop(struct snd_soc_codec *codec)
|
|
|
{
|
|
|
struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec);
|
|
@@ -3512,14 +3513,10 @@ static void wm1811_micd_stop(struct snd_soc_codec *codec)
|
|
|
if (!wm8994->jackdet)
|
|
|
return;
|
|
|
|
|
|
- mutex_lock(&wm8994->accdet_lock);
|
|
|
-
|
|
|
snd_soc_update_bits(codec, WM8958_MIC_DETECT_1, WM8958_MICD_ENA, 0);
|
|
|
|
|
|
wm1811_jackdet_set_mode(codec, WM1811_JACKDET_MODE_JACK);
|
|
|
|
|
|
- mutex_unlock(&wm8994->accdet_lock);
|
|
|
-
|
|
|
if (wm8994->wm8994->pdata.jd_ext_cap)
|
|
|
snd_soc_dapm_disable_pin(&codec->dapm,
|
|
|
"MICBIAS2");
|
|
@@ -3560,10 +3557,10 @@ static void wm8958_open_circuit_work(struct work_struct *work)
|
|
|
open_circuit_work.work);
|
|
|
struct device *dev = wm8994->wm8994->dev;
|
|
|
|
|
|
- wm1811_micd_stop(wm8994->hubs.codec);
|
|
|
-
|
|
|
mutex_lock(&wm8994->accdet_lock);
|
|
|
|
|
|
+ wm1811_micd_stop(wm8994->hubs.codec);
|
|
|
+
|
|
|
dev_dbg(dev, "Reporting open circuit\n");
|
|
|
|
|
|
wm8994->jack_mic = false;
|