summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGirish Mahadevan <girishm@codeaurora.org>2016-08-01 16:51:49 -0600
committerGerrit - the friendly Code Review server <code-review@localhost>2016-09-23 16:42:38 -0700
commitedcda5390729b5c634c2497b889acabab7956974 (patch)
tree0456d7cd1c3c2dd1cf3852cb4de75bce06413823
parent9e2d528dc47d04e98c5e6f1c4ef84fc268115d36 (diff)
serial: msm_serial_hs: Change the wakeup interrupt enable sequence
The wakeup variable keeps track of the 2 edge interrupts needed to detect wakeup from deep sleep, when the second edge interrupt is detected the wake byte is injected into the tty buffer. On some boards due to noisy GPIO pins an interrupt is detected as soon as the wakeup irq is enabled and before the variable is reset leading to bogus wakeup bytes being injected into the serial buffer. To protect against this, make sure the wakeup interrupt is enabled after all the state variables are reset to protect against spurious wakeups. Change-Id: I8002a67d8d9cb41709049ff34f35717f3dd0acd0 Acked-by: Yijiang Yuan <yijiangy@qti.qualcomm.com> Signed-off-by: Girish Mahadevan <girishm@codeaurora.org>
-rw-r--r--drivers/tty/serial/msm_serial_hs.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/tty/serial/msm_serial_hs.c b/drivers/tty/serial/msm_serial_hs.c
index 51dce6d43890..fa3c9e511663 100644
--- a/drivers/tty/serial/msm_serial_hs.c
+++ b/drivers/tty/serial/msm_serial_hs.c
@@ -2213,12 +2213,12 @@ void enable_wakeup_interrupt(struct msm_hs_port *msm_uport)
return;
if (!(msm_uport->wakeup.enabled)) {
- enable_irq(msm_uport->wakeup.irq);
- disable_irq(uport->irq);
spin_lock_irqsave(&uport->lock, flags);
msm_uport->wakeup.ignore = 1;
msm_uport->wakeup.enabled = true;
spin_unlock_irqrestore(&uport->lock, flags);
+ disable_irq(uport->irq);
+ enable_irq(msm_uport->wakeup.irq);
} else {
MSM_HS_WARN("%s:Wake up IRQ already enabled", __func__);
}