Skip to content

Commit

Permalink
ASoC: wm8994: Factor out WM1811A detection mode setting
Browse files Browse the repository at this point in the history
Push everything through one function for active use cases, should be
no practical effect.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
  • Loading branch information
Mark Brown committed Mar 4, 2012
1 parent 28e3326 commit 1defde2
Showing 1 changed file with 28 additions and 20 deletions.
48 changes: 28 additions & 20 deletions sound/soc/codecs/wm8994.c
Original file line number Diff line number Diff line change
Expand Up @@ -685,18 +685,37 @@ SOC_SINGLE_TLV("MIXINL IN1RP Boost Volume", WM8994_INPUT_MIXER_1, 8, 1, 0,
static void wm1811_jackdet_set_mode(struct snd_soc_codec *codec, u16 mode)
{
struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec);
u16 old = snd_soc_read(codec, WM8994_ANTIPOP_2)
& WM1811_JACKDET_MODE_MASK;

if (!wm8994->jackdet || !wm8994->jack_cb)
return;

if (wm8994->active_refcount)
mode = WM1811_JACKDET_MODE_AUDIO;

if (mode == old)
return;

snd_soc_update_bits(codec, WM8994_ANTIPOP_2,
WM1811_JACKDET_MODE_MASK, mode);

if (mode == WM1811_JACKDET_MODE_MIC)
msleep(2);
switch (mode) {
case WM1811_JACKDET_MODE_MIC:
case WM1811_JACKDET_MODE_AUDIO:
switch (old) {
case WM1811_JACKDET_MODE_MIC:
case WM1811_JACKDET_MODE_AUDIO:
break;
default:
msleep(2);
break;
}

default:
break;
}

}

static void active_reference(struct snd_soc_codec *codec)
Expand All @@ -710,15 +729,8 @@ static void active_reference(struct snd_soc_codec *codec)
dev_dbg(codec->dev, "Active refcount incremented, now %d\n",
wm8994->active_refcount);

if (wm8994->active_refcount == 1) {
/* If we're using jack detection go into audio mode */
if (wm8994->jackdet && wm8994->jack_cb) {
snd_soc_update_bits(codec, WM8994_ANTIPOP_2,
WM1811_JACKDET_MODE_MASK,
WM1811_JACKDET_MODE_AUDIO);
msleep(2);
}
}
/* If we're using jack detection go into audio mode */
wm1811_jackdet_set_mode(codec, WM1811_JACKDET_MODE_AUDIO);

mutex_unlock(&wm8994->accdet_lock);
}
Expand All @@ -737,16 +749,12 @@ static void active_dereference(struct snd_soc_codec *codec)

if (wm8994->active_refcount == 0) {
/* Go into appropriate detection only mode */
if (wm8994->jackdet && wm8994->jack_cb) {
if (wm8994->jack_mic || wm8994->mic_detecting)
mode = WM1811_JACKDET_MODE_MIC;
else
mode = WM1811_JACKDET_MODE_JACK;
if (wm8994->jack_mic || wm8994->mic_detecting)
mode = WM1811_JACKDET_MODE_MIC;
else
mode = WM1811_JACKDET_MODE_JACK;

snd_soc_update_bits(codec, WM8994_ANTIPOP_2,
WM1811_JACKDET_MODE_MASK,
mode);
}
wm1811_jackdet_set_mode(codec, mode);
}

mutex_unlock(&wm8994->accdet_lock);
Expand Down

0 comments on commit 1defde2

Please sign in to comment.