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 | |
| 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>
| -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); |
