Browse Source

Merge "ASoC: wcd: Avoid multiple insertion/removals for aux cable"

Linux Build Service Account 7 years ago
parent
commit
e241554a95
3 changed files with 9 additions and 1 deletions
  1. 5 1
      asoc/codecs/wcd-mbhc-legacy.c
  2. 3 0
      asoc/codecs/wcd-mbhc-v2.c
  3. 1 0
      asoc/codecs/wcd-mbhc-v2.h

+ 5 - 1
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

+ 3 - 0
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 |

+ 1 - 0
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,