aboutsummaryrefslogtreecommitdiffstats
path: root/sound/soc/codecs/wm8962.c
diff options
context:
space:
mode:
authorCharles Keepax <ckeepax@opensource.wolfsonmicro.com>2014-02-18 10:22:18 -0500
committerMark Brown <broonie@linaro.org>2014-02-20 05:22:56 -0500
commitf1a3b8d9d4818b88cd7de369da3bb1804c2ad7da (patch)
treef4a7cad35c0a79c46c0b2204890d00c776397469 /sound/soc/codecs/wm8962.c
parente951f267fd042ce6ca66449dd6d537b6126a10d7 (diff)
ASoC: wm8962: Update locking around use of DAPM pin API
The pin updates in this driver look like they are intended to be done atomically, update to do so. Signed-off-by: Charles Keepax <ckeepax@opensource.wolfsonmicro.com> Signed-off-by: Mark Brown <broonie@linaro.org>
Diffstat (limited to 'sound/soc/codecs/wm8962.c')
-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);