aboutsummaryrefslogtreecommitdiffstats
path: root/sound/soc/codecs
diff options
context:
space:
mode:
Diffstat (limited to 'sound/soc/codecs')
-rw-r--r--sound/soc/codecs/wm8962.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/sound/soc/codecs/wm8962.c b/sound/soc/codecs/wm8962.c
index 97db3b45b411..9e6233633c44 100644
--- a/sound/soc/codecs/wm8962.c
+++ b/sound/soc/codecs/wm8962.c
@@ -3089,6 +3089,7 @@ static irqreturn_t wm8962_irq(int irq, void *data)
3089int wm8962_mic_detect(struct snd_soc_codec *codec, struct snd_soc_jack *jack) 3089int wm8962_mic_detect(struct snd_soc_codec *codec, struct snd_soc_jack *jack)
3090{ 3090{
3091 struct wm8962_priv *wm8962 = snd_soc_codec_get_drvdata(codec); 3091 struct wm8962_priv *wm8962 = snd_soc_codec_get_drvdata(codec);
3092 struct snd_soc_dapm_context *dapm = &codec->dapm;
3092 int irq_mask, enable; 3093 int irq_mask, enable;
3093 3094
3094 wm8962->jack = jack; 3095 wm8962->jack = jack;
@@ -3109,14 +3110,18 @@ int wm8962_mic_detect(struct snd_soc_codec *codec, struct snd_soc_jack *jack)
3109 snd_soc_jack_report(wm8962->jack, 0, 3110 snd_soc_jack_report(wm8962->jack, 0,
3110 SND_JACK_MICROPHONE | SND_JACK_BTN_0); 3111 SND_JACK_MICROPHONE | SND_JACK_BTN_0);
3111 3112
3113 snd_soc_dapm_mutex_lock(dapm);
3114
3112 if (jack) { 3115 if (jack) {
3113 snd_soc_dapm_force_enable_pin(&codec->dapm, "SYSCLK"); 3116 snd_soc_dapm_force_enable_pin_unlocked(dapm, "SYSCLK");
3114 snd_soc_dapm_force_enable_pin(&codec->dapm, "MICBIAS"); 3117 snd_soc_dapm_force_enable_pin_unlocked(dapm, "MICBIAS");
3115 } else { 3118 } else {
3116 snd_soc_dapm_disable_pin(&codec->dapm, "SYSCLK"); 3119 snd_soc_dapm_disable_pin_unlocked(dapm, "SYSCLK");
3117 snd_soc_dapm_disable_pin(&codec->dapm, "MICBIAS"); 3120 snd_soc_dapm_disable_pin_unlocked(dapm, "MICBIAS");
3118 } 3121 }
3119 3122
3123 snd_soc_dapm_mutex_unlock(dapm);
3124
3120 return 0; 3125 return 0;
3121} 3126}
3122EXPORT_SYMBOL_GPL(wm8962_mic_detect); 3127EXPORT_SYMBOL_GPL(wm8962_mic_detect);