From cd61c6ef145cb16d5b11faacf72f42c9abce4acb Mon Sep 17 00:00:00 2001 From: Ramprasad Katkam Date: Tue, 18 Sep 2018 13:22:58 +0530 Subject: [PATCH] soc: swr-mstr: Avoid handling redundant swr wakeup events It is sometimes observed that afe could send multiple wakeup events at a time. Avoid this by handling wakeup event only once per swr suspend. Change-Id: Ieb9ed1b18c8c93cb7db4b75e3411cc25838be492 Signed-off-by: Ramprasad Katkam --- soc/swr-mstr-ctrl.c | 8 ++++++-- soc/swr-mstr-ctrl.h | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/soc/swr-mstr-ctrl.c b/soc/swr-mstr-ctrl.c index 7232fe83ca..69f9fb153e 100644 --- a/soc/swr-mstr-ctrl.c +++ b/soc/swr-mstr-ctrl.c @@ -1499,8 +1499,10 @@ static int swrm_event_notify(struct notifier_block *self, schedule_work(&(swrm->dc_presence_work)); break; case SWR_WAKE_IRQ_EVENT: - if (swrm->wakeup_req) + if (swrm->wakeup_req && !swrm->wakeup_triggered) { + swrm->wakeup_triggered = true; schedule_work(&swrm->wakeup_work); + } break; default: dev_err(swrm->dev, "%s: invalid event type: %lu\n", @@ -1928,9 +1930,11 @@ static int swrm_runtime_suspend(struct device *dev) swrm_cmd_fifo_wr_cmd(swrm, 0x2, 0xF, 0xF, SWRS_SCP_CONTROL); usleep_range(100, 105); - if (swrm->wakeup_req) + if (swrm->wakeup_req) { msm_aud_evt_blocking_notifier_call_chain( SWR_WAKE_IRQ_REGISTER, (void *)swrm); + swrm->wakeup_triggered = false; + } } swrm_clk_request(swrm, false); } diff --git a/soc/swr-mstr-ctrl.h b/soc/swr-mstr-ctrl.h index 862596651d..1c41ffcf66 100644 --- a/soc/swr-mstr-ctrl.h +++ b/soc/swr-mstr-ctrl.h @@ -150,8 +150,8 @@ struct swr_mstr_ctrl { u32 clk_stop_mode0_supp; struct work_struct wakeup_work; u32 wakeup_req; - bool dev_up; + bool wakeup_triggered; }; #endif /* _SWR_WCD_CTRL_H */