diff --git a/asoc/codecs/wcd-mbhc-v2.c b/asoc/codecs/wcd-mbhc-v2.c index fd02dce7cb..6f3b19ba6c 100644 --- a/asoc/codecs/wcd-mbhc-v2.c +++ b/asoc/codecs/wcd-mbhc-v2.c @@ -776,6 +776,11 @@ void wcd_mbhc_find_plug_and_report(struct wcd_mbhc *mbhc, bool anc_mic_found = false; enum snd_jack_types jack_type; + if (mbhc->deinit_in_progress) { + pr_info("%s: mbhc deinit in progess: ignore report\n"); + return; + } + pr_debug("%s: enter current_plug(%d) new_plug(%d)\n", __func__, mbhc->current_plug, plug_type); @@ -1882,6 +1887,7 @@ int wcd_mbhc_init(struct wcd_mbhc *mbhc, struct snd_soc_codec *codec, goto err_hphr_ocp_irq; } + mbhc->deinit_in_progress = false; pr_debug("%s: leave ret %d\n", __func__, ret); return ret; diff --git a/asoc/codecs/wcd-mbhc-v2.h b/asoc/codecs/wcd-mbhc-v2.h index 2fb09ff5be..0473574104 100644 --- a/asoc/codecs/wcd-mbhc-v2.h +++ b/asoc/codecs/wcd-mbhc-v2.h @@ -582,6 +582,7 @@ struct wcd_mbhc { struct completion btn_press_compl; struct mutex hphl_pa_lock; struct mutex hphr_pa_lock; + bool deinit_in_progress; /* Holds mbhc detection method - ADC/Legacy */ unsigned int mbhc_detection_logic; diff --git a/asoc/codecs/wcd934x/wcd934x.c b/asoc/codecs/wcd934x/wcd934x.c index 92395d3401..4f28ae99c3 100644 --- a/asoc/codecs/wcd934x/wcd934x.c +++ b/asoc/codecs/wcd934x/wcd934x.c @@ -9980,6 +9980,7 @@ static int tavil_device_down(struct wcd9xxx *wcd9xxx) for (count = 0; count < NUM_CODEC_DAIS; count++) priv->dai[count].bus_down_in_recovery = true; + priv->mbhc->wcd_mbhc.deinit_in_progress = true; if (delayed_work_pending(&priv->spk_anc_dwork.dwork)) cancel_delayed_work(&priv->spk_anc_dwork.dwork); for (decimator = 0; decimator < WCD934X_NUM_DECIMATORS; decimator++) {