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>
This commit is contained in:
Girish Mahadevan 2016-08-01 16:51:49 -06:00 committed by Gerrit - the friendly Code Review server
parent 9e2d528dc4
commit edcda53907

View file

@ -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__);
}