asoc: codecs: cancel all delayed work during SSR/PDR
Cancel any pending delayed work in device down call to ensure no work is scheduled during or after a SSR/PDR sequence. Change-Id: I4cc89cb1a9d8be732c978044d4eea3cf6644ec30 Signed-off-by: Karthikeyan Mani <kmani@codeaurora.org> Signed-off-by: Banajit Goswami <bgoswami@codeaurora.org>
This commit is contained in:
parent
4ea1aaec01
commit
e964a75f32
1 changed files with 24 additions and 0 deletions
|
@ -9972,11 +9972,35 @@ static int tavil_device_down(struct wcd9xxx *wcd9xxx)
|
|||
struct snd_soc_codec *codec;
|
||||
struct tavil_priv *priv;
|
||||
int count;
|
||||
int decimator;
|
||||
int ret;
|
||||
|
||||
codec = (struct snd_soc_codec *)(wcd9xxx->ssr_priv);
|
||||
priv = snd_soc_codec_get_drvdata(codec);
|
||||
for (count = 0; count < NUM_CODEC_DAIS; count++)
|
||||
priv->dai[count].bus_down_in_recovery = 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++) {
|
||||
if (delayed_work_pending
|
||||
(&priv->tx_mute_dwork[decimator].dwork))
|
||||
cancel_delayed_work
|
||||
(&priv->tx_mute_dwork[decimator].dwork);
|
||||
if (delayed_work_pending
|
||||
(&priv->tx_hpf_work[decimator].dwork))
|
||||
cancel_delayed_work
|
||||
(&priv->tx_hpf_work[decimator].dwork);
|
||||
}
|
||||
if (delayed_work_pending(&priv->power_gate_work))
|
||||
cancel_delayed_work_sync(&priv->power_gate_work);
|
||||
if (delayed_work_pending(&priv->mbhc->wcd_mbhc.mbhc_btn_dwork)) {
|
||||
ret = cancel_delayed_work(&priv->mbhc->wcd_mbhc.mbhc_btn_dwork);
|
||||
if (ret)
|
||||
priv->mbhc->wcd_mbhc.mbhc_cb->lock_sleep
|
||||
(&priv->mbhc->wcd_mbhc, false);
|
||||
}
|
||||
|
||||
if (priv->swr.ctrl_data)
|
||||
swrm_wcd_notify(priv->swr.ctrl_data[0].swr_pdev,
|
||||
SWR_DEVICE_DOWN, NULL);
|
||||
|
|
Loading…
Add table
Reference in a new issue