瀏覽代碼

ASoC: wcd-mbhc: Fix high impedance lineout detected as headphone issue

During playback if lineout is inserted it is detected
as lineout then changed to headphone. This is because
we do not compute impedance again as pa is on. Force
jack to be detected as lineout based on initial detection
to resolve the issue.

Change-Id: I243c324dcd251596db97aeef07b8535986550650
Signed-off-by: Vatsal Bucha <[email protected]>
Vatsal Bucha 5 年之前
父節點
當前提交
48003fde1a
共有 1 個文件被更改,包括 19 次插入1 次删除
  1. 19 1
      asoc/codecs/wcd-mbhc-v2.c

+ 19 - 1
asoc/codecs/wcd-mbhc-v2.c

@@ -655,7 +655,6 @@ 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 &&
@@ -714,6 +713,25 @@ void wcd_mbhc_report_plug(struct wcd_mbhc *mbhc, int insertion,
 			}
 		}
 
+		/* Do not calculate impedance again for lineout
+		 * as during playback pa is on and impedance values
+		 * will not be correct resulting in lineout detected
+		 * as headphone.
+		 */
+		if ((is_pa_on) && mbhc->force_linein == true) {
+			jack_type = SND_JACK_LINEOUT;
+			mbhc->current_plug = MBHC_PLUG_TYPE_HIGH_HPH;
+			if (mbhc->hph_status) {
+				mbhc->hph_status &= ~(SND_JACK_HEADSET |
+						SND_JACK_LINEOUT |
+						SND_JACK_UNSUPPORTED);
+				wcd_mbhc_jack_report(mbhc,
+						&mbhc->headset_jack,
+						mbhc->hph_status,
+						WCD_MBHC_JACK_MASK);
+			}
+		}
+
 		mbhc->hph_status |= jack_type;
 
 		pr_debug("%s: Reporting insertion %d(%x)\n", __func__,