From 71e95c67ea78f1f9b29cd18f9fc8acb9b97c1ea1 Mon Sep 17 00:00:00 2001 From: Vatsal Bucha Date: Mon, 16 Dec 2019 15:03:41 +0530 Subject: [PATCH] ASoC: wcd938x: Fix headset detection during SSR/PDR Headset is corrected as lineout during SSR/PDR. This is because adc voltage is not measured correctly due to SSR state. Enable flag deinit_in_progress during SSR down to check if device is not reported and disable it after device up. Change-Id: I6fc4fff4149c36ba16aa668a960505504a5d811f Signed-off-by: Vatsal Bucha --- asoc/codecs/wcd937x/wcd937x.c | 2 ++ asoc/codecs/wcd938x/wcd938x.c | 2 ++ 2 files changed, 4 insertions(+) diff --git a/asoc/codecs/wcd937x/wcd937x.c b/asoc/codecs/wcd937x/wcd937x.c index 3043d6439e..c14480ac6c 100644 --- a/asoc/codecs/wcd937x/wcd937x.c +++ b/asoc/codecs/wcd937x/wcd937x.c @@ -1589,6 +1589,7 @@ static int wcd937x_event_notify(struct notifier_block *block, 0x80, 0x00); break; case BOLERO_WCD_EVT_SSR_DOWN: + wcd937x->mbhc->wcd_mbhc.deinit_in_progress = true; mbhc = &wcd937x->mbhc->wcd_mbhc; wcd937x_mbhc_ssr_down(wcd937x->mbhc, component); wcd937x_reset_low(wcd937x->dev); @@ -1612,6 +1613,7 @@ static int wcd937x_event_notify(struct notifier_block *block, } else { wcd937x_mbhc_hs_detect(component, mbhc->mbhc_cfg); } + wcd937x->mbhc->wcd_mbhc.deinit_in_progress = false; break; default: dev_err(component->dev, "%s: invalid event %d\n", __func__, diff --git a/asoc/codecs/wcd938x/wcd938x.c b/asoc/codecs/wcd938x/wcd938x.c index 6dc5ec461e..a2aa486e66 100644 --- a/asoc/codecs/wcd938x/wcd938x.c +++ b/asoc/codecs/wcd938x/wcd938x.c @@ -2032,6 +2032,7 @@ static int wcd938x_event_notify(struct notifier_block *block, break; case BOLERO_WCD_EVT_SSR_DOWN: wcd938x->dev_up = false; + wcd938x->mbhc->wcd_mbhc.deinit_in_progress = true; mbhc = &wcd938x->mbhc->wcd_mbhc; wcd938x_mbhc_ssr_down(wcd938x->mbhc, component); wcd938x_reset_low(wcd938x->dev); @@ -2056,6 +2057,7 @@ static int wcd938x_event_notify(struct notifier_block *block, } else { wcd938x_mbhc_hs_detect(component, mbhc->mbhc_cfg); } + wcd938x->mbhc->wcd_mbhc.deinit_in_progress = false; wcd938x->dev_up = true; break; case BOLERO_WCD_EVT_CLK_NOTIFY: