ASoC: mbhc-adc: Prevent lineout from being reported two times

Sometimes lineout is reported twice, first during initial
detection and then during loop due to output mic voltage
not being measured correctly. Prevent cable from being
reported as headphone during second time if it was reported
as lineout in initial detection.

Change-Id: If828917cb2acbb0ed5b2de9bf1431d0fbb4a9d10
Signed-off-by: Vatsal Bucha <vbucha@codeaurora.org>
This commit is contained in:
Vatsal Bucha 2021-09-29 13:42:35 +05:30
parent fbd69cbe23
commit 8f1926c5ea

View File

@ -453,7 +453,8 @@ static bool wcd_mbhc_adc_check_for_spl_headset(struct wcd_mbhc *mbhc,
adc_hph_threshold = wcd_mbhc_adc_get_hph_thres(mbhc);
if (output_mv > adc_threshold || output_mv < adc_hph_threshold) {
spl_hs = false;
if (mbhc->force_linein == true)
spl_hs = false;
} else {
spl_hs = true;
if (spl_hs_cnt)
@ -515,9 +516,12 @@ static bool wcd_is_special_headset(struct wcd_mbhc *mbhc)
msleep(50);
output_mv = wcd_measure_adc_once(mbhc, MUX_CTL_IN2P);
if (output_mv <= adc_threshold) {
pr_debug("%s: Special headset detected in %d msecs\n",
__func__, delay);
is_spl_hs = true;
if (mbhc->force_linein != true) {
pr_debug(
"%s: Special headset detected in %d msecs\n",
__func__, delay);
is_spl_hs = true;
}
}
if (delay == SPECIAL_HS_DETECT_TIME_MS) {
@ -831,7 +835,7 @@ correct_plug_type:
}
}
if (output_mv > hs_threshold) {
if (output_mv > hs_threshold || mbhc->force_linein == true) {
pr_debug("%s: cable is extension cable\n", __func__);
plug_type = MBHC_PLUG_TYPE_HIGH_HPH;
wrk_complete = true;