diff options
author | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2012-03-03 15:02:49 -0500 |
---|---|---|
committer | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2012-03-03 20:59:01 -0500 |
commit | 1defde2a50f9171e665cc8f4c46fe48e86bb364e (patch) | |
tree | 973c41548fe3b48a7bc9438310140e6d27682ab7 | |
parent | 28e33269a71cb4104c2e0629b6a3ef7344436f93 (diff) |
ASoC: wm8994: Factor out WM1811A detection mode setting
Push everything through one function for active use cases, should be
no practical effect.
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
-rw-r--r-- | sound/soc/codecs/wm8994.c | 48 |
1 files changed, 28 insertions, 20 deletions
diff --git a/sound/soc/codecs/wm8994.c b/sound/soc/codecs/wm8994.c index bda5ddbeecb4..2417ef9316ed 100644 --- a/sound/soc/codecs/wm8994.c +++ b/sound/soc/codecs/wm8994.c | |||
@@ -685,6 +685,8 @@ SOC_SINGLE_TLV("MIXINL IN1RP Boost Volume", WM8994_INPUT_MIXER_1, 8, 1, 0, | |||
685 | static void wm1811_jackdet_set_mode(struct snd_soc_codec *codec, u16 mode) | 685 | static void wm1811_jackdet_set_mode(struct snd_soc_codec *codec, u16 mode) |
686 | { | 686 | { |
687 | struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec); | 687 | struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec); |
688 | u16 old = snd_soc_read(codec, WM8994_ANTIPOP_2) | ||
689 | & WM1811_JACKDET_MODE_MASK; | ||
688 | 690 | ||
689 | if (!wm8994->jackdet || !wm8994->jack_cb) | 691 | if (!wm8994->jackdet || !wm8994->jack_cb) |
690 | return; | 692 | return; |
@@ -692,11 +694,28 @@ static void wm1811_jackdet_set_mode(struct snd_soc_codec *codec, u16 mode) | |||
692 | if (wm8994->active_refcount) | 694 | if (wm8994->active_refcount) |
693 | mode = WM1811_JACKDET_MODE_AUDIO; | 695 | mode = WM1811_JACKDET_MODE_AUDIO; |
694 | 696 | ||
697 | if (mode == old) | ||
698 | return; | ||
699 | |||
695 | snd_soc_update_bits(codec, WM8994_ANTIPOP_2, | 700 | snd_soc_update_bits(codec, WM8994_ANTIPOP_2, |
696 | WM1811_JACKDET_MODE_MASK, mode); | 701 | WM1811_JACKDET_MODE_MASK, mode); |
697 | 702 | ||
698 | if (mode == WM1811_JACKDET_MODE_MIC) | 703 | switch (mode) { |
699 | msleep(2); | 704 | case WM1811_JACKDET_MODE_MIC: |
705 | case WM1811_JACKDET_MODE_AUDIO: | ||
706 | switch (old) { | ||
707 | case WM1811_JACKDET_MODE_MIC: | ||
708 | case WM1811_JACKDET_MODE_AUDIO: | ||
709 | break; | ||
710 | default: | ||
711 | msleep(2); | ||
712 | break; | ||
713 | } | ||
714 | |||
715 | default: | ||
716 | break; | ||
717 | } | ||
718 | |||
700 | } | 719 | } |
701 | 720 | ||
702 | static void active_reference(struct snd_soc_codec *codec) | 721 | static void active_reference(struct snd_soc_codec *codec) |
@@ -710,15 +729,8 @@ static void active_reference(struct snd_soc_codec *codec) | |||
710 | dev_dbg(codec->dev, "Active refcount incremented, now %d\n", | 729 | dev_dbg(codec->dev, "Active refcount incremented, now %d\n", |
711 | wm8994->active_refcount); | 730 | wm8994->active_refcount); |
712 | 731 | ||
713 | if (wm8994->active_refcount == 1) { | 732 | /* If we're using jack detection go into audio mode */ |
714 | /* If we're using jack detection go into audio mode */ | 733 | wm1811_jackdet_set_mode(codec, WM1811_JACKDET_MODE_AUDIO); |
715 | if (wm8994->jackdet && wm8994->jack_cb) { | ||
716 | snd_soc_update_bits(codec, WM8994_ANTIPOP_2, | ||
717 | WM1811_JACKDET_MODE_MASK, | ||
718 | WM1811_JACKDET_MODE_AUDIO); | ||
719 | msleep(2); | ||
720 | } | ||
721 | } | ||
722 | 734 | ||
723 | mutex_unlock(&wm8994->accdet_lock); | 735 | mutex_unlock(&wm8994->accdet_lock); |
724 | } | 736 | } |
@@ -737,16 +749,12 @@ static void active_dereference(struct snd_soc_codec *codec) | |||
737 | 749 | ||
738 | if (wm8994->active_refcount == 0) { | 750 | if (wm8994->active_refcount == 0) { |
739 | /* Go into appropriate detection only mode */ | 751 | /* Go into appropriate detection only mode */ |
740 | if (wm8994->jackdet && wm8994->jack_cb) { | 752 | if (wm8994->jack_mic || wm8994->mic_detecting) |
741 | if (wm8994->jack_mic || wm8994->mic_detecting) | 753 | mode = WM1811_JACKDET_MODE_MIC; |
742 | mode = WM1811_JACKDET_MODE_MIC; | 754 | else |
743 | else | 755 | mode = WM1811_JACKDET_MODE_JACK; |
744 | mode = WM1811_JACKDET_MODE_JACK; | ||
745 | 756 | ||
746 | snd_soc_update_bits(codec, WM8994_ANTIPOP_2, | 757 | wm1811_jackdet_set_mode(codec, mode); |
747 | WM1811_JACKDET_MODE_MASK, | ||
748 | mode); | ||
749 | } | ||
750 | } | 758 | } |
751 | 759 | ||
752 | mutex_unlock(&wm8994->accdet_lock); | 760 | mutex_unlock(&wm8994->accdet_lock); |