Commit 6b5da663 authored by Bard Liao's avatar Bard Liao Committed by Mark Brown

ASoC: rt5645: read jd1_1 status for jd detection

Read the jd status after invert control. The benefit is we don't need
to invert the reading jd status when jd invert is needed.
Signed-off-by: default avatarBard Liao <bardliao@realtek.com>
Tested-by: default avatarHans de Goede <hdegoede@redhat.com>
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 2ea659a9
...@@ -3238,24 +3238,16 @@ static void rt5645_jack_detect_work(struct work_struct *work) ...@@ -3238,24 +3238,16 @@ static void rt5645_jack_detect_work(struct work_struct *work)
snd_soc_jack_report(rt5645->mic_jack, snd_soc_jack_report(rt5645->mic_jack,
report, SND_JACK_MICROPHONE); report, SND_JACK_MICROPHONE);
return; return;
case 1: /* 2 port */ default: /* read rt5645 jd1_1 status */
val = snd_soc_read(rt5645->codec, RT5645_A_JD_CTRL1) & 0x0070; val = snd_soc_read(rt5645->codec, RT5645_INT_IRQ_ST) & 0x1000;
break;
default: /* 1 port */
val = snd_soc_read(rt5645->codec, RT5645_A_JD_CTRL1) & 0x0020;
break; break;
} }
switch (val) { if (!val && (rt5645->jack_type == 0)) { /* jack in */
/* jack in */ report = rt5645_jack_detect(rt5645->codec, 1);
case 0x30: /* 2 port */ } else if (!val && rt5645->jack_type != 0) {
case 0x0: /* 1 port or 2 port */ /* for push button and jack out */
if (rt5645->jack_type == 0) {
report = rt5645_jack_detect(rt5645->codec, 1);
/* for push button and jack out */
break;
}
btn_type = 0; btn_type = 0;
if (snd_soc_read(rt5645->codec, RT5645_INT_IRQ_ST) & 0x4) { if (snd_soc_read(rt5645->codec, RT5645_INT_IRQ_ST) & 0x4) {
/* button pressed */ /* button pressed */
...@@ -3302,19 +3294,12 @@ static void rt5645_jack_detect_work(struct work_struct *work) ...@@ -3302,19 +3294,12 @@ static void rt5645_jack_detect_work(struct work_struct *work)
mod_timer(&rt5645->btn_check_timer, mod_timer(&rt5645->btn_check_timer,
msecs_to_jiffies(100)); msecs_to_jiffies(100));
} }
} else {
break; /* jack out */
/* jack out */
case 0x70: /* 2 port */
case 0x10: /* 2 port */
case 0x20: /* 1 port */
report = 0; report = 0;
snd_soc_update_bits(rt5645->codec, snd_soc_update_bits(rt5645->codec,
RT5645_INT_IRQ_ST, 0x1, 0x0); RT5645_INT_IRQ_ST, 0x1, 0x0);
rt5645_jack_detect(rt5645->codec, 0); rt5645_jack_detect(rt5645->codec, 0);
break;
default:
break;
} }
snd_soc_jack_report(rt5645->hp_jack, report, SND_JACK_HEADPHONE); snd_soc_jack_report(rt5645->hp_jack, report, SND_JACK_HEADPHONE);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment