diff options
| author | Charles Keepax <ckeepax@opensource.wolfsonmicro.com> | 2014-02-18 10:22:28 -0500 |
|---|---|---|
| committer | Mark Brown <broonie@linaro.org> | 2014-02-20 05:23:01 -0500 |
| commit | 26e24ddce755cd6fb4b05a87ae37f7e10faa0c4b (patch) | |
| tree | 6ffc6e015809d4a7e0311359956a85848de9a457 | |
| parent | 1845a7255a308da0c32714a2d57d79225037ed5b (diff) | |
ASoC: pxa: tosa: 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/pxa/tosa.c | 28 |
1 files changed, 16 insertions, 12 deletions
diff --git a/sound/soc/pxa/tosa.c b/sound/soc/pxa/tosa.c index 1d9c2ed223bc..2a4b438ce97c 100644 --- a/sound/soc/pxa/tosa.c +++ b/sound/soc/pxa/tosa.c | |||
| @@ -48,31 +48,35 @@ static void tosa_ext_control(struct snd_soc_codec *codec) | |||
| 48 | { | 48 | { |
| 49 | struct snd_soc_dapm_context *dapm = &codec->dapm; | 49 | struct snd_soc_dapm_context *dapm = &codec->dapm; |
| 50 | 50 | ||
| 51 | snd_soc_dapm_mutex_lock(dapm); | ||
| 52 | |||
| 51 | /* set up jack connection */ | 53 | /* set up jack connection */ |
| 52 | switch (tosa_jack_func) { | 54 | switch (tosa_jack_func) { |
| 53 | case TOSA_HP: | 55 | case TOSA_HP: |
| 54 | snd_soc_dapm_disable_pin(dapm, "Mic (Internal)"); | 56 | snd_soc_dapm_disable_pin_unlocked(dapm, "Mic (Internal)"); |
| 55 | snd_soc_dapm_enable_pin(dapm, "Headphone Jack"); | 57 | snd_soc_dapm_enable_pin_unlocked(dapm, "Headphone Jack"); |
| 56 | snd_soc_dapm_disable_pin(dapm, "Headset Jack"); | 58 | snd_soc_dapm_disable_pin_unlocked(dapm, "Headset Jack"); |
| 57 | break; | 59 | break; |
| 58 | case TOSA_MIC_INT: | 60 | case TOSA_MIC_INT: |
| 59 | snd_soc_dapm_enable_pin(dapm, "Mic (Internal)"); | 61 | snd_soc_dapm_enable_pin_unlocked(dapm, "Mic (Internal)"); |
| 60 | snd_soc_dapm_disable_pin(dapm, "Headphone Jack"); | 62 | snd_soc_dapm_disable_pin_unlocked(dapm, "Headphone Jack"); |
| 61 | snd_soc_dapm_disable_pin(dapm, "Headset Jack"); | 63 | snd_soc_dapm_disable_pin_unlocked(dapm, "Headset Jack"); |
| 62 | break; | 64 | break; |
| 63 | case TOSA_HEADSET: | 65 | case TOSA_HEADSET: |
| 64 | snd_soc_dapm_disable_pin(dapm, "Mic (Internal)"); | 66 | snd_soc_dapm_disable_pin_unlocked(dapm, "Mic (Internal)"); |
| 65 | snd_soc_dapm_disable_pin(dapm, "Headphone Jack"); | 67 | snd_soc_dapm_disable_pin_unlocked(dapm, "Headphone Jack"); |
| 66 | snd_soc_dapm_enable_pin(dapm, "Headset Jack"); | 68 | snd_soc_dapm_enable_pin_unlocked(dapm, "Headset Jack"); |
| 67 | break; | 69 | break; |
| 68 | } | 70 | } |
| 69 | 71 | ||
| 70 | if (tosa_spk_func == TOSA_SPK_ON) | 72 | if (tosa_spk_func == TOSA_SPK_ON) |
| 71 | snd_soc_dapm_enable_pin(dapm, "Speaker"); | 73 | snd_soc_dapm_enable_pin_unlocked(dapm, "Speaker"); |
| 72 | else | 74 | else |
| 73 | snd_soc_dapm_disable_pin(dapm, "Speaker"); | 75 | snd_soc_dapm_disable_pin_unlocked(dapm, "Speaker"); |
| 76 | |||
| 77 | snd_soc_dapm_sync_unlocked(dapm); | ||
| 74 | 78 | ||
| 75 | snd_soc_dapm_sync(dapm); | 79 | snd_soc_dapm_mutex_unlock(dapm); |
| 76 | } | 80 | } |
| 77 | 81 | ||
| 78 | static int tosa_startup(struct snd_pcm_substream *substream) | 82 | static int tosa_startup(struct snd_pcm_substream *substream) |
