diff options
-rw-r--r-- | sound/soc/codecs/wm8994.c | 45 |
1 files changed, 27 insertions, 18 deletions
diff --git a/sound/soc/codecs/wm8994.c b/sound/soc/codecs/wm8994.c index b9be9cbc4603..e8daf55d37e3 100644 --- a/sound/soc/codecs/wm8994.c +++ b/sound/soc/codecs/wm8994.c | |||
@@ -2549,43 +2549,52 @@ static int wm8994_set_bias_level(struct snd_soc_codec *codec, | |||
2549 | int wm8994_vmid_mode(struct snd_soc_codec *codec, enum wm8994_vmid_mode mode) | 2549 | int wm8994_vmid_mode(struct snd_soc_codec *codec, enum wm8994_vmid_mode mode) |
2550 | { | 2550 | { |
2551 | struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec); | 2551 | struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec); |
2552 | struct snd_soc_dapm_context *dapm = &codec->dapm; | ||
2552 | 2553 | ||
2553 | switch (mode) { | 2554 | switch (mode) { |
2554 | case WM8994_VMID_NORMAL: | 2555 | case WM8994_VMID_NORMAL: |
2556 | snd_soc_dapm_mutex_lock(dapm); | ||
2557 | |||
2555 | if (wm8994->hubs.lineout1_se) { | 2558 | if (wm8994->hubs.lineout1_se) { |
2556 | snd_soc_dapm_disable_pin(&codec->dapm, | 2559 | snd_soc_dapm_disable_pin_unlocked(dapm, |
2557 | "LINEOUT1N Driver"); | 2560 | "LINEOUT1N Driver"); |
2558 | snd_soc_dapm_disable_pin(&codec->dapm, | 2561 | snd_soc_dapm_disable_pin_unlocked(dapm, |
2559 | "LINEOUT1P Driver"); | 2562 | "LINEOUT1P Driver"); |
2560 | } | 2563 | } |
2561 | if (wm8994->hubs.lineout2_se) { | 2564 | if (wm8994->hubs.lineout2_se) { |
2562 | snd_soc_dapm_disable_pin(&codec->dapm, | 2565 | snd_soc_dapm_disable_pin_unlocked(dapm, |
2563 | "LINEOUT2N Driver"); | 2566 | "LINEOUT2N Driver"); |
2564 | snd_soc_dapm_disable_pin(&codec->dapm, | 2567 | snd_soc_dapm_disable_pin_unlocked(dapm, |
2565 | "LINEOUT2P Driver"); | 2568 | "LINEOUT2P Driver"); |
2566 | } | 2569 | } |
2567 | 2570 | ||
2568 | /* Do the sync with the old mode to allow it to clean up */ | 2571 | /* Do the sync with the old mode to allow it to clean up */ |
2569 | snd_soc_dapm_sync(&codec->dapm); | 2572 | snd_soc_dapm_sync_unlocked(dapm); |
2570 | wm8994->vmid_mode = mode; | 2573 | wm8994->vmid_mode = mode; |
2574 | |||
2575 | snd_soc_dapm_mutex_unlock(dapm); | ||
2571 | break; | 2576 | break; |
2572 | 2577 | ||
2573 | case WM8994_VMID_FORCE: | 2578 | case WM8994_VMID_FORCE: |
2579 | snd_soc_dapm_mutex_lock(dapm); | ||
2580 | |||
2574 | if (wm8994->hubs.lineout1_se) { | 2581 | if (wm8994->hubs.lineout1_se) { |
2575 | snd_soc_dapm_force_enable_pin(&codec->dapm, | 2582 | snd_soc_dapm_force_enable_pin_unlocked(dapm, |
2576 | "LINEOUT1N Driver"); | 2583 | "LINEOUT1N Driver"); |
2577 | snd_soc_dapm_force_enable_pin(&codec->dapm, | 2584 | snd_soc_dapm_force_enable_pin_unlocked(dapm, |
2578 | "LINEOUT1P Driver"); | 2585 | "LINEOUT1P Driver"); |
2579 | } | 2586 | } |
2580 | if (wm8994->hubs.lineout2_se) { | 2587 | if (wm8994->hubs.lineout2_se) { |
2581 | snd_soc_dapm_force_enable_pin(&codec->dapm, | 2588 | snd_soc_dapm_force_enable_pin_unlocked(dapm, |
2582 | "LINEOUT2N Driver"); | 2589 | "LINEOUT2N Driver"); |
2583 | snd_soc_dapm_force_enable_pin(&codec->dapm, | 2590 | snd_soc_dapm_force_enable_pin_unlocked(dapm, |
2584 | "LINEOUT2P Driver"); | 2591 | "LINEOUT2P Driver"); |
2585 | } | 2592 | } |
2586 | 2593 | ||
2587 | wm8994->vmid_mode = mode; | 2594 | wm8994->vmid_mode = mode; |
2588 | snd_soc_dapm_sync(&codec->dapm); | 2595 | snd_soc_dapm_sync_unlocked(dapm); |
2596 | |||
2597 | snd_soc_dapm_mutex_unlock(dapm); | ||
2589 | break; | 2598 | break; |
2590 | 2599 | ||
2591 | default: | 2600 | default: |