msm_serial: Use new clock framework apis
Clock framework provides clk_prepare/clk_unprepare (callable from
non-atomic context only) and clk_enable/clk_disable (callable from
atomic/non-atomic context) APIs. Start using these new APIs. This
change doesn't use new clock APIs for CONFIG_SERIAL_MSM_RX_WAKEUP
and CONFIG_SERIAL_MSM_CLOCK_CONTROL selected features as these are
legacy features and has not been used since longtime and probably
broken in functionality. Hence new clock framework related change
for these two features would be added if it is required to be
supported in future.
Change-Id: I4f58f45e63bb4c2a9c320ffb18fe28532ed5ab55
Signed-off-by: Mayank Rana <mrana@codeaurora.org>
diff --git a/drivers/tty/serial/msm_serial.c b/drivers/tty/serial/msm_serial.c
index 8b5807e..32e9dc0 100644
--- a/drivers/tty/serial/msm_serial.c
+++ b/drivers/tty/serial/msm_serial.c
@@ -487,9 +487,14 @@
static void msm_init_clock(struct uart_port *port)
{
+ int ret;
struct msm_port *msm_port = UART_TO_MSM(port);
- clk_enable(msm_port->clk);
+ ret = clk_prepare_enable(msm_port->clk);
+ if (ret) {
+ pr_err("%s(): Can't enable uartclk. ret:%d\n", __func__, ret);
+ return;
+ }
#ifdef CONFIG_SERIAL_MSM_CLOCK_CONTROL
msm_port->clk_state = MSM_CLK_ON;
@@ -519,7 +524,7 @@
clk_disable(msm_port->clk);
msm_port->clk_state = MSM_CLK_PORT_OFF;
#else
- clk_disable(msm_port->clk);
+ clk_disable_unprepare(msm_port->clk);
#endif
}
@@ -751,14 +756,18 @@
static void msm_power(struct uart_port *port, unsigned int state,
unsigned int oldstate)
{
+ int ret;
struct msm_port *msm_port = UART_TO_MSM(port);
switch (state) {
case 0:
- clk_enable(msm_port->clk);
+ ret = clk_prepare_enable(msm_port->clk);
+ if (ret)
+ pr_err("msm_serial: %s(): Can't enable uartclk.\n",
+ __func__);
break;
case 3:
- clk_disable(msm_port->clk);
+ clk_disable_unprepare(msm_port->clk);
break;
default:
pr_err("msm_serial: %s(): Unknown PM state %d\n",