summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNaveen Kaje <nkaje@codeaurora.org>2015-09-04 16:04:21 -0600
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-23 21:11:42 -0700
commitfaa98506d0e1ec950efc5f38f8758fee95820b7e (patch)
treee2452c63a7a8ffb342184ac33bc98771c8554556
parent849559ffdc3be07810e32842dc3ef353d31fd098 (diff)
msm_serial_hs: handle UART IRQ during PM operations for OBS
In OBS, enable/disable UART IRQ during power management operations to allow the device to enter low power modes. Change-Id: I8479d6bc867c4ecb34adf83cd62b01f6fb60fef8 Signed-off-by: Naveen Kaje <nkaje@codeaurora.org>
-rw-r--r--drivers/tty/serial/msm_serial_hs.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/drivers/tty/serial/msm_serial_hs.c b/drivers/tty/serial/msm_serial_hs.c
index cd2a31684637..d885592e8137 100644
--- a/drivers/tty/serial/msm_serial_hs.c
+++ b/drivers/tty/serial/msm_serial_hs.c
@@ -3041,6 +3041,18 @@ static int device_id_set_used(int index)
return ret;
}
+static void obs_manage_irq(struct msm_hs_port *msm_uport, bool en)
+{
+ struct uart_port *uport = &(msm_uport->uport);
+
+ if (msm_uport->obs) {
+ if (en)
+ enable_irq(uport->irq);
+ else
+ disable_irq(uport->irq);
+ }
+}
+
static void msm_hs_pm_suspend(struct device *dev)
{
struct platform_device *pdev = to_platform_device(dev);
@@ -3061,6 +3073,7 @@ static void msm_hs_pm_suspend(struct device *dev)
msm_uport->pm_state = MSM_HS_PM_SUSPENDED;
msm_hs_resource_off(msm_uport);
+ obs_manage_irq(msm_uport, false);
msm_hs_clk_bus_unvote(msm_uport);
if (!atomic_read(&msm_uport->client_req_state))
toggle_wakeup_interrupt(msm_uport);
@@ -3086,6 +3099,7 @@ static int msm_hs_pm_resume(struct device *dev)
toggle_wakeup_interrupt(msm_uport);
msm_hs_clk_bus_vote(msm_uport);
__pm_stay_awake(&msm_uport->ws);
+ obs_manage_irq(msm_uport, true);
msm_uport->pm_state = MSM_HS_PM_ACTIVE;
msm_hs_resource_on(msm_uport);