summaryrefslogtreecommitdiff
path: root/drivers/tty
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/tty')
-rw-r--r--drivers/tty/serial/msm_serial_hs.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/drivers/tty/serial/msm_serial_hs.c b/drivers/tty/serial/msm_serial_hs.c
index 2ad8d40b3293..8f66cd34c97e 100644
--- a/drivers/tty/serial/msm_serial_hs.c
+++ b/drivers/tty/serial/msm_serial_hs.c
@@ -2204,6 +2204,12 @@ static int msm_hs_check_clock_off(struct uart_port *uport)
if (use_low_power_wakeup(msm_uport)) {
msm_uport->wakeup.ignore = 1;
enable_irq(msm_uport->wakeup.irq);
+ /*
+ * keeping uport-irq enabled all the time
+ * gates XO shutdown in idle power collapse. Disable
+ * this only when wakeup irq is set.
+ */
+ disable_irq(uport->irq);
}
wake_unlock(&msm_uport->dma_wake_lock);
@@ -2412,8 +2418,11 @@ void msm_hs_request_clock_on(struct uart_port *uport)
switch (msm_uport->clk_state) {
case MSM_HS_CLK_OFF:
wake_lock(&msm_uport->dma_wake_lock);
- if (use_low_power_wakeup(msm_uport))
+ if (use_low_power_wakeup(msm_uport)) {
disable_irq_nosync(msm_uport->wakeup.irq);
+ /* uport-irq was disabled when clocked off */
+ enable_irq(uport->irq);
+ }
spin_unlock_irqrestore(&uport->lock, flags);
ret = msm_hs_clock_vote(msm_uport);