asoc: mbhc: ignore mbhc event report during ssr

When ssr is in progress, during some race conditions
mbhc events are getting reported when codec is still
coming up. Ignore such events without reporting.

Change-Id: I3d3f78f97c2b855fc36a480f38c166bda2d979f0
Signed-off-by: Karthikeyan Mani <kmani@codeaurora.org>
This commit is contained in:
Karthikeyan Mani
2018-06-28 18:25:08 -07:00
committed by Gerrit - the friendly Code Review server
parent ec7e65b420
commit 3dd07e6937
3 changed files with 8 additions and 0 deletions

View File

@@ -776,6 +776,11 @@ void wcd_mbhc_find_plug_and_report(struct wcd_mbhc *mbhc,
bool anc_mic_found = false; bool anc_mic_found = false;
enum snd_jack_types jack_type; 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", pr_debug("%s: enter current_plug(%d) new_plug(%d)\n",
__func__, mbhc->current_plug, plug_type); __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; goto err_hphr_ocp_irq;
} }
mbhc->deinit_in_progress = false;
pr_debug("%s: leave ret %d\n", __func__, ret); pr_debug("%s: leave ret %d\n", __func__, ret);
return ret; return ret;

View File

@@ -582,6 +582,7 @@ struct wcd_mbhc {
struct completion btn_press_compl; struct completion btn_press_compl;
struct mutex hphl_pa_lock; struct mutex hphl_pa_lock;
struct mutex hphr_pa_lock; struct mutex hphr_pa_lock;
bool deinit_in_progress;
/* Holds mbhc detection method - ADC/Legacy */ /* Holds mbhc detection method - ADC/Legacy */
unsigned int mbhc_detection_logic; unsigned int mbhc_detection_logic;

View File

@@ -9980,6 +9980,7 @@ static int tavil_device_down(struct wcd9xxx *wcd9xxx)
for (count = 0; count < NUM_CODEC_DAIS; count++) for (count = 0; count < NUM_CODEC_DAIS; count++)
priv->dai[count].bus_down_in_recovery = true; 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)) if (delayed_work_pending(&priv->spk_anc_dwork.dwork))
cancel_delayed_work(&priv->spk_anc_dwork.dwork); cancel_delayed_work(&priv->spk_anc_dwork.dwork);
for (decimator = 0; decimator < WCD934X_NUM_DECIMATORS; decimator++) { for (decimator = 0; decimator < WCD934X_NUM_DECIMATORS; decimator++) {