msm_serial: Cleanup regarding usage of clock enable/disable apis
Currently driver uses clock apis (clock_enable()/clock_disable()) before
accessing any UART Core register. Hence remove all usage of clock apis
which is just increasing the refcount of uart clock instead of turning
on/off the uart lock. Start using serial core PM functionality to enable
disable the uart clock.
Change-Id: I42e180fe6b3b92e4d9cc6d289f5f4689658e51c6
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 9e85eb5..8b5807e 100644
--- a/drivers/tty/serial/msm_serial.c
+++ b/drivers/tty/serial/msm_serial.c
@@ -2,7 +2,7 @@
* drivers/serial/msm_serial.c - driver for msm7k serial device and console
*
* Copyright (C) 2007 Google, Inc.
- * Copyright (c) 2009-2011, Code Aurora Forum. All rights reserved.
+ * Copyright (c) 2009-2012, Code Aurora Forum. All rights reserved.
* Author: Robert Love <rlove@google.com>
*
* This software is licensed under the terms of the GNU General Public
@@ -102,48 +102,32 @@
{
struct msm_port *msm_port = UART_TO_MSM(port);
- clk_enable(msm_port->clk);
-
msm_port->imr &= ~UART_IMR_TXLEV;
msm_write(port, msm_port->imr, UART_IMR);
-
- clk_disable(msm_port->clk);
}
static void msm_start_tx(struct uart_port *port)
{
struct msm_port *msm_port = UART_TO_MSM(port);
- clk_enable(msm_port->clk);
-
msm_port->imr |= UART_IMR_TXLEV;
msm_write(port, msm_port->imr, UART_IMR);
-
- clk_disable(msm_port->clk);
}
static void msm_stop_rx(struct uart_port *port)
{
struct msm_port *msm_port = UART_TO_MSM(port);
- clk_enable(msm_port->clk);
-
msm_port->imr &= ~(UART_IMR_RXLEV | UART_IMR_RXSTALE);
msm_write(port, msm_port->imr, UART_IMR);
-
- clk_disable(msm_port->clk);
}
static void msm_enable_ms(struct uart_port *port)
{
struct msm_port *msm_port = UART_TO_MSM(port);
- clk_enable(msm_port->clk);
-
msm_port->imr |= UART_IMR_DELTA_CTS;
msm_write(port, msm_port->imr, UART_IMR);
-
- clk_disable(msm_port->clk);
}
#ifdef CONFIG_SERIAL_MSM_CLOCK_CONTROL
@@ -365,7 +349,6 @@
unsigned int misr;
spin_lock_irqsave(&port->lock, flags);
- clk_enable(msm_port->clk);
misr = msm_read(port, UART_MISR);
msm_write(port, 0, UART_IMR); /* disable interrupt */
@@ -377,7 +360,6 @@
handle_delta_cts(port);
msm_write(port, msm_port->imr, UART_IMR); /* restore interrupt */
- clk_disable(msm_port->clk);
spin_unlock_irqrestore(&port->lock, flags);
return IRQ_HANDLED;
@@ -386,12 +368,8 @@
static unsigned int msm_tx_empty(struct uart_port *port)
{
unsigned int ret;
- struct msm_port *msm_port = UART_TO_MSM(port);
- clk_enable(msm_port->clk);
ret = (msm_read(port, UART_SR) & UART_SR_TX_EMPTY) ? TIOCSER_TEMT : 0;
- clk_disable(msm_port->clk);
-
return ret;
}
@@ -403,9 +381,6 @@
static void msm_set_mctrl(struct uart_port *port, unsigned int mctrl)
{
unsigned int mr;
- struct msm_port *msm_port = UART_TO_MSM(port);
-
- clk_enable(msm_port->clk);
mr = msm_read(port, UART_MR1);
@@ -417,22 +392,14 @@
mr |= UART_MR1_RX_RDY_CTL;
msm_write(port, mr, UART_MR1);
}
-
- clk_disable(msm_port->clk);
}
static void msm_break_ctl(struct uart_port *port, int break_ctl)
{
- struct msm_port *msm_port = UART_TO_MSM(port);
-
- clk_enable(msm_port->clk);
-
if (break_ctl)
msm_write(port, UART_CR_CMD_START_BREAK, UART_CR);
else
msm_write(port, UART_CR_CMD_STOP_BREAK, UART_CR);
-
- clk_disable(msm_port->clk);
}
static void msm_set_baud_rate(struct uart_port *port, unsigned int baud)
@@ -631,13 +598,9 @@
{
struct msm_port *msm_port = UART_TO_MSM(port);
- clk_enable(msm_port->clk);
-
msm_port->imr = 0;
msm_write(port, 0, UART_IMR); /* disable interrupts */
- clk_disable(msm_port->clk);
-
free_irq(port->irq, port);
#ifdef CONFIG_SERIAL_MSM_RX_WAKEUP
@@ -657,10 +620,8 @@
{
unsigned long flags;
unsigned int baud, mr;
- struct msm_port *msm_port = UART_TO_MSM(port);
spin_lock_irqsave(&port->lock, flags);
- clk_enable(msm_port->clk);
/* calculate and set baud rate */
baud = uart_get_baud_rate(port, termios, old, 300, 115200);
@@ -723,8 +684,6 @@
port->read_status_mask |= UART_SR_RX_BREAK;
uart_update_timeout(port, termios->c_cflag, baud);
-
- clk_disable(msm_port->clk);
spin_unlock_irqrestore(&port->lock, flags);
}
@@ -792,7 +751,6 @@
static void msm_power(struct uart_port *port, unsigned int state,
unsigned int oldstate)
{
-#ifndef CONFIG_SERIAL_MSM_CLOCK_CONTROL
struct msm_port *msm_port = UART_TO_MSM(port);
switch (state) {
@@ -803,9 +761,9 @@
clk_disable(msm_port->clk);
break;
default:
- printk(KERN_ERR "msm_serial: Unknown PM state %d\n", state);
+ pr_err("msm_serial: %s(): Unknown PM state %d\n",
+ __func__, state);
}
-#endif
}
static struct uart_ops msm_uart_pops = {