[PATCH V2] serial: imx: enable the clocks only when the uart is used
Shawn Guo
shawn.guo at linaro.org
Sat Jun 8 02:01:19 EDT 2013
On Tue, Jun 04, 2013 at 09:59:33AM +0800, Huang Shijie wrote:
> Current code opens the clocks when the uart driver is probed.
> This will wastes some power if several uarts are enabled, but not really
> used.
>
> So close these clocks for uart, and enable the clocks only when
> the uart is used.
>
> Signed-off-by: Huang Shijie <b32955 at freescale.com>
Running linux-next 20130607, I just found that the serial console stops
working due to this patch. I think the clocks need to be enabled for
console as well.
Shawn
> ---
> v1 --> v2:
> check the return value of clk_prepare_enable().
> ---
> drivers/tty/serial/imx.c | 17 ++++++++++++++---
> 1 files changed, 14 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/tty/serial/imx.c b/drivers/tty/serial/imx.c
> index 72bc1db..7cc4810 100644
> --- a/drivers/tty/serial/imx.c
> +++ b/drivers/tty/serial/imx.c
> @@ -699,6 +699,14 @@ static int imx_startup(struct uart_port *port)
> int retval;
> unsigned long flags, temp;
>
> + retval = clk_prepare_enable(sport->clk_per);
> + if (retval)
> + goto error_out1;
> +
> + retval = clk_prepare_enable(sport->clk_ipg);
> + if (retval)
> + goto error_out1;
> +
> imx_setup_ufcr(sport, 0);
>
> /* disable the DREN bit (Data Ready interrupt enable) before
> @@ -884,6 +892,9 @@ static void imx_shutdown(struct uart_port *port)
>
> writel(temp, sport->port.membase + UCR1);
> spin_unlock_irqrestore(&sport->port.lock, flags);
> +
> + clk_disable_unprepare(sport->clk_per);
> + clk_disable_unprepare(sport->clk_ipg);
> }
>
> static void
> @@ -1557,6 +1568,9 @@ static int serial_imx_probe(struct platform_device *pdev)
> goto deinit;
> platform_set_drvdata(pdev, sport);
>
> + clk_disable_unprepare(sport->clk_per);
> + clk_disable_unprepare(sport->clk_ipg);
> +
> return 0;
> deinit:
> if (pdata && pdata->exit)
> @@ -1578,9 +1592,6 @@ static int serial_imx_remove(struct platform_device *pdev)
>
> uart_remove_one_port(&imx_reg, &sport->port);
>
> - clk_disable_unprepare(sport->clk_per);
> - clk_disable_unprepare(sport->clk_ipg);
> -
> if (pdata && pdata->exit)
> pdata->exit(pdev);
>
> --
> 1.7.1
>
>
>
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
More information about the linux-arm-kernel
mailing list