]> git.baikalelectronics.ru Git - kernel.git/commitdiff
serial: imx: disable console clocks on unregister
authorFrancesco Dolcini <francesco.dolcini@toradex.com>
Wed, 20 Oct 2021 19:26:43 +0000 (21:26 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 21 Oct 2021 08:30:08 +0000 (10:30 +0200)
During console setup imx_uart_console_setup() enables clocks, but they
are never disabled when the console is unregistered, this leads to
clk_prepare_enable() being called multiple times without a matching
clk_disable_unprepare() in case of console unregister.

Ensure that clock enable/disable are balanced adding
clk_disable_unprepare() in the console exit callback.

Signed-off-by: Francesco Dolcini <francesco.dolcini@toradex.com>
Link: https://lore.kernel.org/r/20211020192643.476895-3-francesco.dolcini@toradex.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/imx.c

index 51a9f9423b1a6e3fef43024936768298da45faea..90f82e6c54e46a200dbad5f3f400273670f29116 100644 (file)
@@ -2124,12 +2124,24 @@ error_console:
        return retval;
 }
 
+static int
+imx_uart_console_exit(struct console *co)
+{
+       struct imx_port *sport = imx_uart_ports[co->index];
+
+       clk_disable_unprepare(sport->clk_per);
+       clk_disable_unprepare(sport->clk_ipg);
+
+       return 0;
+}
+
 static struct uart_driver imx_uart_uart_driver;
 static struct console imx_uart_console = {
        .name           = DEV_NAME,
        .write          = imx_uart_console_write,
        .device         = uart_console_device,
        .setup          = imx_uart_console_setup,
+       .exit           = imx_uart_console_exit,
        .flags          = CON_PRINTBUFFER,
        .index          = -1,
        .data           = &imx_uart_uart_driver,