diff --git a/drivers/tty/serial/msm_geni_serial.c b/drivers/tty/serial/msm_geni_serial.c index 3ae76c939b6d..9a016e13d992 100644 --- a/drivers/tty/serial/msm_geni_serial.c +++ b/drivers/tty/serial/msm_geni_serial.c @@ -207,6 +207,7 @@ struct msm_geni_serial_port { struct completion s_cmd_timeout; spinlock_t rx_lock; bool pm_auto_suspend_disable; + bool is_clock_off; }; static const struct uart_ops msm_geni_serial_pops; @@ -2041,7 +2042,7 @@ static void msm_geni_serial_handle_isr(struct uart_port *uport, bool s_cmd_done = false; bool m_cmd_done = false; - if (uart_console(uport) && uport->suspended) { + if (uart_console(uport) && msm_port->is_clock_off) { IPC_LOG_MSG(msm_port->console_log, "%s. Console in suspend state\n", __func__); goto exit_geni_serial_isr; @@ -2855,11 +2856,14 @@ static void msm_geni_serial_cons_pm(struct uart_port *uport, { struct msm_geni_serial_port *msm_port = GET_DEV_PORT(uport); - if (new_state == UART_PM_STATE_ON && old_state == UART_PM_STATE_OFF) + if (new_state == UART_PM_STATE_ON && old_state == UART_PM_STATE_OFF) { se_geni_resources_on(&msm_port->serial_rsc); - else if (new_state == UART_PM_STATE_OFF && - old_state == UART_PM_STATE_ON) + msm_port->is_clock_off = false; + } else if (new_state == UART_PM_STATE_OFF && + old_state == UART_PM_STATE_ON) { se_geni_resources_off(&msm_port->serial_rsc); + msm_port->is_clock_off = true; + } } static void msm_geni_serial_hs_pm(struct uart_port *uport,