mirror of https://gitee.com/openkylin/linux.git
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: Bard Liao <bardliao@realtek.com> Tested-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Takashi Iwai <tiwai@suse.de> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
2ea659a9ef
commit
6b5da66322
|
@ -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)
|
||||||
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);
|
||||||
|
|
Loading…
Reference in New Issue