diff --git a/drivers/tty/serial/imx.c b/drivers/tty/serial/imx.c index ae817f0f5281..c37f939b2b23 100644 --- a/drivers/tty/serial/imx.c +++ b/drivers/tty/serial/imx.c @@ -26,6 +26,7 @@ #include #include #include +#include #include #include #include @@ -1326,11 +1327,19 @@ static void imx_uart_disable_dma(struct imx_port *sport) static int imx_uart_startup(struct uart_port *port) { struct imx_port *sport = (struct imx_port *)port; + struct tty_port *tty_port = &sport->port.state->port; int retval, i; unsigned long flags; int dma_is_inited = 0; u32 ucr1, ucr2, ucr4; + /* some modem may need reset */ + if (!tty_port_suspended(tty_port)) { + retval = device_reset(sport->port.dev); + if (retval && retval != -ENOENT) + return retval; + } + retval = clk_prepare_enable(sport->clk_per); if (retval) return retval;