aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJongrak Kwon <jongrak.kwon@lge.com>2015-09-03 12:26:04 -0700
committerThierry Strudel <tstrudel@google.com>2016-02-09 11:38:00 -0800
commit3e127ab4bad318b412e2fc9fc43e77386effac25 (patch)
tree3b08af2d268ec97de62e9411acec862d02563139
parenta7b55b1d11ae7202d12aaae9e80d0fd777660f0f (diff)
Revert "msm_serial_hs: handle resource voting with pm callbacks disabled"android-6.0.1_r0.37
This reverts commit 6b2c8f6b3d0480fd0d6aec08f8bbf627baf5b9b9. reverted per QCT request due to power regression. Will be included in next AU release. Change-Id: Iacc69e7a7b660271a7ad98dfad7e47884c9ad6f9 Signed-off-by: Jongrak Kwon <jongrak.kwon@lge.com>
-rw-r--r--drivers/tty/serial/msm_serial_hs.c27
1 files changed, 12 insertions, 15 deletions
diff --git a/drivers/tty/serial/msm_serial_hs.c b/drivers/tty/serial/msm_serial_hs.c
index e6168d6981f6..9f7e9bcfefcc 100644
--- a/drivers/tty/serial/msm_serial_hs.c
+++ b/drivers/tty/serial/msm_serial_hs.c
@@ -402,22 +402,13 @@ static void msm_hs_resource_unvote(struct msm_hs_port *msm_uport)
atomic_dec(&msm_uport->clk_count);
pm_runtime_mark_last_busy(uport->dev);
pm_runtime_put_autosuspend(uport->dev);
- __pm_relax(&msm_uport->ws);
}
/* Vote for resources before accessing them */
static void msm_hs_resource_vote(struct msm_hs_port *msm_uport)
{
- int ret;
struct uart_port *uport = &(msm_uport->uport);
- __pm_stay_awake(&msm_uport->ws);
- ret = pm_runtime_get_sync(uport->dev);
- if (ret < 0 || msm_uport->pm_state != MSM_HS_PM_ACTIVE) {
- MSM_HS_WARN("%s(): %p runtime PM callback not invoked",
- __func__, uport->dev);
- msm_hs_pm_resume(uport->dev);
- }
-
+ pm_runtime_get_sync(uport->dev);
atomic_inc(&msm_uport->clk_count);
}
@@ -690,7 +681,6 @@ static int msm_hs_remove(struct platform_device *pdev)
msm_uport->rx.buffer = NULL;
msm_uport->rx.rbuffer = 0;
- wakeup_source_trash(&msm_uport->ws);
destroy_workqueue(msm_uport->hsuart_wq);
mutex_destroy(&msm_uport->mtx);
@@ -2233,6 +2223,7 @@ void msm_hs_request_clock_off(struct uart_port *uport)
if (msm_uport->obs)
atomic_set(&msm_uport->client_req_state, 1);
msm_hs_resource_unvote(msm_uport);
+ __pm_relax(&msm_uport->ws);
}
EXPORT_SYMBOL(msm_hs_request_clock_off);
@@ -2241,6 +2232,13 @@ void msm_hs_request_clock_on(struct uart_port *uport)
struct msm_hs_port *msm_uport = UARTDM_TO_MSM(uport);
msm_hs_resource_vote(UARTDM_TO_MSM(uport));
+ __pm_stay_awake(&msm_uport->ws);
+ if (msm_uport->pm_state != MSM_HS_PM_ACTIVE) {
+ MSM_HS_WARN("%s(): %p runtime PM callback not invoked",
+ __func__, uport->dev);
+ msm_hs_pm_resume(uport->dev);
+ }
+
/* Clear the flag */
if (msm_uport->obs)
atomic_set(&msm_uport->client_req_state, 0);
@@ -2453,6 +2451,7 @@ static int msm_hs_startup(struct uart_port *uport)
struct msm_hs_rx *rx = &msm_uport->rx;
struct sps_pipe *sps_pipe_handle_tx = tx->cons.pipe_handle;
struct sps_pipe *sps_pipe_handle_rx = rx->prod.pipe_handle;
+ struct tty_struct *tty = msm_uport->uport.state->port.tty;
rfr_level = uport->fifosize;
if (rfr_level > 16)
@@ -2486,6 +2485,7 @@ static int msm_hs_startup(struct uart_port *uport)
}
}
+ wakeup_source_init(&msm_uport->ws, tty->name);
ret = msm_hs_config_uart_gpios(uport);
if (ret) {
MSM_HS_ERR("Uart GPIO request failed\n");
@@ -3138,7 +3138,6 @@ static int msm_hs_probe(struct platform_device *pdev)
int core_irqres, bam_irqres, wakeup_irqres;
struct msm_serial_hs_platform_data *pdata = pdev->dev.platform_data;
unsigned long data;
- struct tty_struct *tty;
if (pdev->dev.of_node) {
dev_dbg(&pdev->dev, "device tree enabled\n");
@@ -3344,8 +3343,6 @@ static int msm_hs_probe(struct platform_device *pdev)
uport->line = pdata->userid;
ret = uart_add_one_port(&msm_hs_driver, uport);
if (!ret) {
- tty = msm_uport->uport.state->port.tty;
- wakeup_source_init(&msm_uport->ws, tty->name);
msm_hs_clk_bus_unvote(msm_uport);
msm_serial_hs_rt_init(uport);
return ret;
@@ -3424,8 +3421,8 @@ static void msm_hs_shutdown(struct uart_port *uport)
else
disable_irq(uport->irq);
+ wakeup_source_trash(&msm_uport->ws);
msm_uport->wakeup.enabled = false;
-
/* make sure tx lh finishes */
flush_kthread_worker(&msm_uport->tx.kworker);
ret = wait_event_timeout(msm_uport->tx.wait,