aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sound/soc/codecs/wm8994.c45
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,
2549int wm8994_vmid_mode(struct snd_soc_codec *codec, enum wm8994_vmid_mode mode) 2549int 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: