tty: serial: msm: Remove duplicate handling of clocks

Message ID 1462957229-17567-1-git-send-email-pramod.gurav@linaro.org
State New
Headers show

Commit Message

Pramod Gurav May 11, 2016, 9 a.m.
msm_serial driver provides a .pm callback to the serial core to enable
and disable clock resource in suspend/resume path. This function is
also called before msm_startup. msm_startup also enables the clocks which
is not needed. Hence remove the duplcate clock operation from msm_startup
and msm_shutdown. Same is done in console setup to get rid of duplicate
clock operation.

Tested on DB410C console.

Signed-off-by: Pramod Gurav <pramod.gurav@linaro.org>

---
 drivers/tty/serial/msm_serial.c | 15 ++-------------
 1 file changed, 2 insertions(+), 13 deletions(-)

-- 
1.8.2.1

--
To unsubscribe from this list: send the line "unsubscribe linux-arm-msm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

Pramod Gurav May 16, 2016, 8:31 a.m. | #1
On 11 May 2016 at 14:30, Pramod Gurav <pramod.gurav@linaro.org> wrote:
> msm_serial driver provides a .pm callback to the serial core to enable

> and disable clock resource in suspend/resume path. This function is

> also called before msm_startup. msm_startup also enables the clocks which

> is not needed. Hence remove the duplcate clock operation from msm_startup

> and msm_shutdown. Same is done in console setup to get rid of duplicate

> clock operation.

>

> Tested on DB410C console.

>

> Signed-off-by: Pramod Gurav <pramod.gurav@linaro.org>

> ---

>  drivers/tty/serial/msm_serial.c | 15 ++-------------

>  1 file changed, 2 insertions(+), 13 deletions(-)

>

> diff --git a/drivers/tty/serial/msm_serial.c b/drivers/tty/serial/msm_serial.c

> index dcde955..73c3217 100644

> --- a/drivers/tty/serial/msm_serial.c

> +++ b/drivers/tty/serial/msm_serial.c

> @@ -959,15 +959,6 @@ static int msm_set_baud_rate(struct uart_port *port, unsigned int baud,

>         return baud;

>  }

>

> -static void msm_init_clock(struct uart_port *port)

> -{

> -       struct msm_port *msm_port = UART_TO_MSM(port);

> -

> -       clk_prepare_enable(msm_port->clk);

> -       clk_prepare_enable(msm_port->pclk);

> -       msm_serial_set_mnd_regs(port);

> -}

> -

>  static int msm_startup(struct uart_port *port)

>  {

>         struct msm_port *msm_port = UART_TO_MSM(port);

> @@ -982,7 +973,7 @@ static int msm_startup(struct uart_port *port)

>         if (unlikely(ret))

>                 return ret;

>

> -       msm_init_clock(port);

> +       msm_serial_set_mnd_regs(port);


Further testing with another UART port made me realize that serial
port does not work after disabling msm_port->clk clock. The RX data
part will be affected.
Confirmed from manual that this clock should never be turned of to
avoid loss of incoming data. Sorry for the noise.

>

>         if (likely(port->fifosize > 12))

>                 rfr_level = port->fifosize - 12;

> @@ -1021,8 +1012,6 @@ static void msm_shutdown(struct uart_port *port)

>         if (msm_port->is_uartdm)

>                 msm_release_dma(msm_port);

>

> -       clk_disable_unprepare(msm_port->clk);

> -

>         free_irq(port->irq, port);

>  }

>

> @@ -1451,7 +1440,7 @@ static int __init msm_console_setup(struct console *co, char *options)

>         if (unlikely(!port->membase))

>                 return -ENXIO;

>

> -       msm_init_clock(port);

> +       msm_serial_set_mnd_regs(port);

>

>         if (options)

>                 uart_parse_options(options, &baud, &parity, &bits, &flow);

> --

> 1.8.2.1

>

--
To unsubscribe from this list: send the line "unsubscribe linux-arm-msm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch

diff --git a/drivers/tty/serial/msm_serial.c b/drivers/tty/serial/msm_serial.c
index dcde955..73c3217 100644
--- a/drivers/tty/serial/msm_serial.c
+++ b/drivers/tty/serial/msm_serial.c
@@ -959,15 +959,6 @@  static int msm_set_baud_rate(struct uart_port *port, unsigned int baud,
 	return baud;
 }
 
-static void msm_init_clock(struct uart_port *port)
-{
-	struct msm_port *msm_port = UART_TO_MSM(port);
-
-	clk_prepare_enable(msm_port->clk);
-	clk_prepare_enable(msm_port->pclk);
-	msm_serial_set_mnd_regs(port);
-}
-
 static int msm_startup(struct uart_port *port)
 {
 	struct msm_port *msm_port = UART_TO_MSM(port);
@@ -982,7 +973,7 @@  static int msm_startup(struct uart_port *port)
 	if (unlikely(ret))
 		return ret;
 
-	msm_init_clock(port);
+	msm_serial_set_mnd_regs(port);
 
 	if (likely(port->fifosize > 12))
 		rfr_level = port->fifosize - 12;
@@ -1021,8 +1012,6 @@  static void msm_shutdown(struct uart_port *port)
 	if (msm_port->is_uartdm)
 		msm_release_dma(msm_port);
 
-	clk_disable_unprepare(msm_port->clk);
-
 	free_irq(port->irq, port);
 }
 
@@ -1451,7 +1440,7 @@  static int __init msm_console_setup(struct console *co, char *options)
 	if (unlikely(!port->membase))
 		return -ENXIO;
 
-	msm_init_clock(port);
+	msm_serial_set_mnd_regs(port);
 
 	if (options)
 		uart_parse_options(options, &baud, &parity, &bits, &flow);