summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asoc/codecs/wcd-mbhc-legacy.c6
-rw-r--r--asoc/codecs/wcd-mbhc-v2.c3
-rw-r--r--asoc/codecs/wcd-mbhc-v2.h1
3 files changed, 9 insertions, 1 deletions
diff --git a/asoc/codecs/wcd-mbhc-legacy.c b/asoc/codecs/wcd-mbhc-legacy.c
index 9f6a6254..d03d8342 100644
--- a/asoc/codecs/wcd-mbhc-legacy.c
+++ b/asoc/codecs/wcd-mbhc-legacy.c
@@ -688,7 +688,11 @@ correct_plug_type:
if (!wrk_complete && mbhc->btn_press_intr) {
pr_debug("%s: Can be slow insertion of headphone\n", __func__);
wcd_cancel_btn_work(mbhc);
- plug_type = MBHC_PLUG_TYPE_HEADPHONE;
+ /* Report as headphone only if previously
+ * not reported as lineout
+ */
+ if (!mbhc->force_linein)
+ plug_type = MBHC_PLUG_TYPE_HEADPHONE;
}
/*
* If plug_tye is headset, we might have already reported either in
diff --git a/asoc/codecs/wcd-mbhc-v2.c b/asoc/codecs/wcd-mbhc-v2.c
index 6088a1ee..0b6e3556 100644
--- a/asoc/codecs/wcd-mbhc-v2.c
+++ b/asoc/codecs/wcd-mbhc-v2.c
@@ -605,6 +605,7 @@ void wcd_mbhc_report_plug(struct wcd_mbhc *mbhc, int insertion,
hphrocp_off_report(mbhc, SND_JACK_OC_HPHR);
hphlocp_off_report(mbhc, SND_JACK_OC_HPHL);
mbhc->current_plug = MBHC_PLUG_TYPE_NONE;
+ mbhc->force_linein = false;
} else {
/*
* Report removal of current jack type.
@@ -657,6 +658,7 @@ void wcd_mbhc_report_plug(struct wcd_mbhc *mbhc, int insertion,
SND_JACK_LINEOUT |
SND_JACK_ANC_HEADPHONE |
SND_JACK_UNSUPPORTED);
+ mbhc->force_linein = false;
}
if (mbhc->current_plug == MBHC_PLUG_TYPE_HEADSET &&
@@ -699,6 +701,7 @@ void wcd_mbhc_report_plug(struct wcd_mbhc *mbhc, int insertion,
mbhc->zr < MAX_IMPED) &&
(jack_type == SND_JACK_HEADPHONE)) {
jack_type = SND_JACK_LINEOUT;
+ mbhc->force_linein = true;
mbhc->current_plug = MBHC_PLUG_TYPE_HIGH_HPH;
if (mbhc->hph_status) {
mbhc->hph_status &= ~(SND_JACK_HEADSET |
diff --git a/asoc/codecs/wcd-mbhc-v2.h b/asoc/codecs/wcd-mbhc-v2.h
index bdae7763..94f096ad 100644
--- a/asoc/codecs/wcd-mbhc-v2.h
+++ b/asoc/codecs/wcd-mbhc-v2.h
@@ -589,6 +589,7 @@ struct wcd_mbhc {
struct work_struct usbc_analog_work;
struct wcd_mbhc_fn *mbhc_fn;
+ bool force_linein;
};
void wcd_mbhc_find_plug_and_report(struct wcd_mbhc *mbhc,