Loading drivers/tty/serial/msm_serial_hs.c +18 −7 Original line number Diff line number Diff line Loading @@ -349,6 +349,7 @@ static int msm_hs_clock_vote(struct msm_hs_port *msm_uport) "%s: Could not turn on pclk [%d]\n", __func__, rc); mutex_unlock(&msm_uport->clk_mutex); atomic_dec_return(&msm_uport->clk_count); return rc; } } Loading @@ -360,6 +361,7 @@ static int msm_hs_clock_vote(struct msm_hs_port *msm_uport) __func__, rc); clk_disable_unprepare(msm_uport->pclk); mutex_unlock(&msm_uport->clk_mutex); atomic_dec_return(&msm_uport->clk_count); return rc; } msm_uport->clk_state = MSM_HS_CLK_ON; Loading Loading @@ -2257,13 +2259,25 @@ void msm_hs_request_clock_on(struct uart_port *uport) unsigned long flags; unsigned int data; int ret = 0; int cur_clk_state; /* * cancel the hrtimer first so that * clk_state can not change in flight */ hrtimer_cancel(&msm_uport->clk_off_timer); flush_work(&msm_uport->clock_off_w); cur_clk_state = msm_uport->clk_state; msm_hs_clock_vote(msm_uport); mutex_lock(&msm_uport->clk_mutex); spin_lock_irqsave(&uport->lock, flags); if (msm_uport->clk_state == MSM_HS_CLK_REQUEST_OFF) if (cur_clk_state == MSM_HS_CLK_REQUEST_OFF) { msm_uport->clk_state = MSM_HS_CLK_ON; msm_hs_enable_flow_control(uport); switch (msm_uport->clk_state) { } switch (cur_clk_state) { case MSM_HS_CLK_OFF: wake_lock(&msm_uport->dma_wake_lock); if (use_low_power_wakeup(msm_uport)) { Loading @@ -2272,20 +2286,18 @@ void msm_hs_request_clock_on(struct uart_port *uport) enable_irq(uport->irq); } spin_unlock_irqrestore(&uport->lock, flags); mutex_unlock(&msm_uport->clk_mutex); ret = msm_hs_clock_vote(msm_uport); mutex_lock(&msm_uport->clk_mutex); spin_lock_irqsave(&uport->lock, flags); if (ret) { MSM_HS_INFO("Clock ON Failure" "For UART CLK Stalling HSUART\n"); break; } spin_lock_irqsave(&uport->lock, flags); /* else fall-through */ case MSM_HS_CLK_REQUEST_OFF: hrtimer_cancel(&msm_uport->clk_off_timer); if (msm_uport->rx.flush == FLUSH_STOP) { spin_unlock_irqrestore(&uport->lock, flags); MSM_HS_DBG("%s:Calling wait forxcompletion\n", Loading @@ -2301,8 +2313,6 @@ void msm_hs_request_clock_on(struct uart_port *uport) } MSM_HS_DBG("%s:clock state %d\n\n", __func__, msm_uport->clk_state); if (msm_uport->clk_state == MSM_HS_CLK_REQUEST_OFF) msm_uport->clk_state = MSM_HS_CLK_ON; if (msm_uport->rx.flush == FLUSH_STOP || msm_uport->rx.flush == FLUSH_SHUTDOWN) { msm_hs_write(uport, UART_DM_CR, RESET_RX); Loading Loading @@ -2335,6 +2345,7 @@ void msm_hs_request_clock_on(struct uart_port *uport) dump_uart_hs_registers(msm_uport); spin_unlock_irqrestore(&uport->lock, flags); mutex_unlock(&msm_uport->clk_mutex); msm_hs_clock_unvote(msm_uport); } EXPORT_SYMBOL(msm_hs_request_clock_on); Loading Loading
drivers/tty/serial/msm_serial_hs.c +18 −7 Original line number Diff line number Diff line Loading @@ -349,6 +349,7 @@ static int msm_hs_clock_vote(struct msm_hs_port *msm_uport) "%s: Could not turn on pclk [%d]\n", __func__, rc); mutex_unlock(&msm_uport->clk_mutex); atomic_dec_return(&msm_uport->clk_count); return rc; } } Loading @@ -360,6 +361,7 @@ static int msm_hs_clock_vote(struct msm_hs_port *msm_uport) __func__, rc); clk_disable_unprepare(msm_uport->pclk); mutex_unlock(&msm_uport->clk_mutex); atomic_dec_return(&msm_uport->clk_count); return rc; } msm_uport->clk_state = MSM_HS_CLK_ON; Loading Loading @@ -2257,13 +2259,25 @@ void msm_hs_request_clock_on(struct uart_port *uport) unsigned long flags; unsigned int data; int ret = 0; int cur_clk_state; /* * cancel the hrtimer first so that * clk_state can not change in flight */ hrtimer_cancel(&msm_uport->clk_off_timer); flush_work(&msm_uport->clock_off_w); cur_clk_state = msm_uport->clk_state; msm_hs_clock_vote(msm_uport); mutex_lock(&msm_uport->clk_mutex); spin_lock_irqsave(&uport->lock, flags); if (msm_uport->clk_state == MSM_HS_CLK_REQUEST_OFF) if (cur_clk_state == MSM_HS_CLK_REQUEST_OFF) { msm_uport->clk_state = MSM_HS_CLK_ON; msm_hs_enable_flow_control(uport); switch (msm_uport->clk_state) { } switch (cur_clk_state) { case MSM_HS_CLK_OFF: wake_lock(&msm_uport->dma_wake_lock); if (use_low_power_wakeup(msm_uport)) { Loading @@ -2272,20 +2286,18 @@ void msm_hs_request_clock_on(struct uart_port *uport) enable_irq(uport->irq); } spin_unlock_irqrestore(&uport->lock, flags); mutex_unlock(&msm_uport->clk_mutex); ret = msm_hs_clock_vote(msm_uport); mutex_lock(&msm_uport->clk_mutex); spin_lock_irqsave(&uport->lock, flags); if (ret) { MSM_HS_INFO("Clock ON Failure" "For UART CLK Stalling HSUART\n"); break; } spin_lock_irqsave(&uport->lock, flags); /* else fall-through */ case MSM_HS_CLK_REQUEST_OFF: hrtimer_cancel(&msm_uport->clk_off_timer); if (msm_uport->rx.flush == FLUSH_STOP) { spin_unlock_irqrestore(&uport->lock, flags); MSM_HS_DBG("%s:Calling wait forxcompletion\n", Loading @@ -2301,8 +2313,6 @@ void msm_hs_request_clock_on(struct uart_port *uport) } MSM_HS_DBG("%s:clock state %d\n\n", __func__, msm_uport->clk_state); if (msm_uport->clk_state == MSM_HS_CLK_REQUEST_OFF) msm_uport->clk_state = MSM_HS_CLK_ON; if (msm_uport->rx.flush == FLUSH_STOP || msm_uport->rx.flush == FLUSH_SHUTDOWN) { msm_hs_write(uport, UART_DM_CR, RESET_RX); Loading Loading @@ -2335,6 +2345,7 @@ void msm_hs_request_clock_on(struct uart_port *uport) dump_uart_hs_registers(msm_uport); spin_unlock_irqrestore(&uport->lock, flags); mutex_unlock(&msm_uport->clk_mutex); msm_hs_clock_unvote(msm_uport); } EXPORT_SYMBOL(msm_hs_request_clock_on); Loading