diff options
author | Charles Keepax <ckeepax@opensource.wolfsonmicro.com> | 2014-02-18 10:22:18 -0500 |
---|---|---|
committer | Mark Brown <broonie@linaro.org> | 2014-02-20 05:22:56 -0500 |
commit | f1a3b8d9d4818b88cd7de369da3bb1804c2ad7da (patch) | |
tree | f4a7cad35c0a79c46c0b2204890d00c776397469 /sound/soc/codecs/wm8962.c | |
parent | e951f267fd042ce6ca66449dd6d537b6126a10d7 (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.c | 13 |
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) | |||
3089 | int wm8962_mic_detect(struct snd_soc_codec *codec, struct snd_soc_jack *jack) | 3089 | int 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 | } |
3122 | EXPORT_SYMBOL_GPL(wm8962_mic_detect); | 3127 | EXPORT_SYMBOL_GPL(wm8962_mic_detect); |