|
@@ -334,27 +334,27 @@ static u32 imx_uart_readl(struct imx_port *sport, u32 offset)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-static inline unsigned uts_reg(struct imx_port *sport)
|
|
|
+static inline unsigned imx_uart_uts_reg(struct imx_port *sport)
|
|
|
{
|
|
|
return sport->devdata->uts_reg;
|
|
|
}
|
|
|
|
|
|
-static inline int is_imx1_uart(struct imx_port *sport)
|
|
|
+static inline int imx_uart_is_imx1(struct imx_port *sport)
|
|
|
{
|
|
|
return sport->devdata->devtype == IMX1_UART;
|
|
|
}
|
|
|
|
|
|
-static inline int is_imx21_uart(struct imx_port *sport)
|
|
|
+static inline int imx_uart_is_imx21(struct imx_port *sport)
|
|
|
{
|
|
|
return sport->devdata->devtype == IMX21_UART;
|
|
|
}
|
|
|
|
|
|
-static inline int is_imx53_uart(struct imx_port *sport)
|
|
|
+static inline int imx_uart_is_imx53(struct imx_port *sport)
|
|
|
{
|
|
|
return sport->devdata->devtype == IMX53_UART;
|
|
|
}
|
|
|
|
|
|
-static inline int is_imx6q_uart(struct imx_port *sport)
|
|
|
+static inline int imx_uart_is_imx6q(struct imx_port *sport)
|
|
|
{
|
|
|
return sport->devdata->devtype == IMX6Q_UART;
|
|
|
}
|
|
@@ -362,7 +362,7 @@ static inline int is_imx6q_uart(struct imx_port *sport)
|
|
|
* Save and restore functions for UCR1, UCR2 and UCR3 registers
|
|
|
*/
|
|
|
#if defined(CONFIG_SERIAL_IMX_CONSOLE)
|
|
|
-static void imx_port_ucrs_save(struct imx_port *sport,
|
|
|
+static void imx_uart_ucrs_save(struct imx_port *sport,
|
|
|
struct imx_port_ucrs *ucr)
|
|
|
{
|
|
|
/* save control registers */
|
|
@@ -371,7 +371,7 @@ static void imx_port_ucrs_save(struct imx_port *sport,
|
|
|
ucr->ucr3 = imx_uart_readl(sport, UCR3);
|
|
|
}
|
|
|
|
|
|
-static void imx_port_ucrs_restore(struct imx_port *sport,
|
|
|
+static void imx_uart_ucrs_restore(struct imx_port *sport,
|
|
|
struct imx_port_ucrs *ucr)
|
|
|
{
|
|
|
/* restore control registers */
|
|
@@ -381,7 +381,7 @@ static void imx_port_ucrs_restore(struct imx_port *sport,
|
|
|
}
|
|
|
#endif
|
|
|
|
|
|
-static void imx_port_rts_active(struct imx_port *sport, u32 *ucr2)
|
|
|
+static void imx_uart_rts_active(struct imx_port *sport, u32 *ucr2)
|
|
|
{
|
|
|
*ucr2 &= ~(UCR2_CTSC | UCR2_CTS);
|
|
|
|
|
@@ -389,7 +389,7 @@ static void imx_port_rts_active(struct imx_port *sport, u32 *ucr2)
|
|
|
mctrl_gpio_set(sport->gpios, sport->port.mctrl);
|
|
|
}
|
|
|
|
|
|
-static void imx_port_rts_inactive(struct imx_port *sport, u32 *ucr2)
|
|
|
+static void imx_uart_rts_inactive(struct imx_port *sport, u32 *ucr2)
|
|
|
{
|
|
|
*ucr2 &= ~UCR2_CTSC;
|
|
|
*ucr2 |= UCR2_CTS;
|
|
@@ -398,13 +398,13 @@ static void imx_port_rts_inactive(struct imx_port *sport, u32 *ucr2)
|
|
|
mctrl_gpio_set(sport->gpios, sport->port.mctrl);
|
|
|
}
|
|
|
|
|
|
-static void imx_port_rts_auto(struct imx_port *sport, u32 *ucr2)
|
|
|
+static void imx_uart_rts_auto(struct imx_port *sport, u32 *ucr2)
|
|
|
{
|
|
|
*ucr2 |= UCR2_CTSC;
|
|
|
}
|
|
|
|
|
|
/* called with port.lock taken and irqs off */
|
|
|
-static void imx_start_rx(struct uart_port *port)
|
|
|
+static void imx_uart_start_rx(struct uart_port *port)
|
|
|
{
|
|
|
struct imx_port *sport = (struct imx_port *)port;
|
|
|
unsigned int ucr1, ucr2;
|
|
@@ -427,7 +427,7 @@ static void imx_start_rx(struct uart_port *port)
|
|
|
}
|
|
|
|
|
|
/* called with port.lock taken and irqs off */
|
|
|
-static void imx_stop_tx(struct uart_port *port)
|
|
|
+static void imx_uart_stop_tx(struct uart_port *port)
|
|
|
{
|
|
|
struct imx_port *sport = (struct imx_port *)port;
|
|
|
u32 ucr1;
|
|
@@ -447,12 +447,12 @@ static void imx_stop_tx(struct uart_port *port)
|
|
|
imx_uart_readl(sport, USR2) & USR2_TXDC) {
|
|
|
u32 ucr2 = imx_uart_readl(sport, UCR2), ucr4;
|
|
|
if (port->rs485.flags & SER_RS485_RTS_AFTER_SEND)
|
|
|
- imx_port_rts_active(sport, &ucr2);
|
|
|
+ imx_uart_rts_active(sport, &ucr2);
|
|
|
else
|
|
|
- imx_port_rts_inactive(sport, &ucr2);
|
|
|
+ imx_uart_rts_inactive(sport, &ucr2);
|
|
|
imx_uart_writel(sport, ucr2, UCR2);
|
|
|
|
|
|
- imx_start_rx(port);
|
|
|
+ imx_uart_start_rx(port);
|
|
|
|
|
|
ucr4 = imx_uart_readl(sport, UCR4);
|
|
|
ucr4 &= ~UCR4_TCEN;
|
|
@@ -461,7 +461,7 @@ static void imx_stop_tx(struct uart_port *port)
|
|
|
}
|
|
|
|
|
|
/* called with port.lock taken and irqs off */
|
|
|
-static void imx_stop_rx(struct uart_port *port)
|
|
|
+static void imx_uart_stop_rx(struct uart_port *port)
|
|
|
{
|
|
|
struct imx_port *sport = (struct imx_port *)port;
|
|
|
u32 ucr1, ucr2;
|
|
@@ -482,7 +482,7 @@ static void imx_stop_rx(struct uart_port *port)
|
|
|
}
|
|
|
|
|
|
/* called with port.lock taken and irqs off */
|
|
|
-static void imx_enable_ms(struct uart_port *port)
|
|
|
+static void imx_uart_enable_ms(struct uart_port *port)
|
|
|
{
|
|
|
struct imx_port *sport = (struct imx_port *)port;
|
|
|
|
|
@@ -491,10 +491,10 @@ static void imx_enable_ms(struct uart_port *port)
|
|
|
mctrl_gpio_enable_ms(sport->gpios);
|
|
|
}
|
|
|
|
|
|
-static void imx_dma_tx(struct imx_port *sport);
|
|
|
+static void imx_uart_dma_tx(struct imx_port *sport);
|
|
|
|
|
|
/* called with port.lock taken and irqs off */
|
|
|
-static inline void imx_transmit_buffer(struct imx_port *sport)
|
|
|
+static inline void imx_uart_transmit_buffer(struct imx_port *sport)
|
|
|
{
|
|
|
struct circ_buf *xmit = &sport->port.state->xmit;
|
|
|
|
|
@@ -507,7 +507,7 @@ static inline void imx_transmit_buffer(struct imx_port *sport)
|
|
|
}
|
|
|
|
|
|
if (uart_circ_empty(xmit) || uart_tx_stopped(&sport->port)) {
|
|
|
- imx_stop_tx(&sport->port);
|
|
|
+ imx_uart_stop_tx(&sport->port);
|
|
|
return;
|
|
|
}
|
|
|
|
|
@@ -524,14 +524,14 @@ static inline void imx_transmit_buffer(struct imx_port *sport)
|
|
|
imx_uart_writel(sport, ucr1, UCR1);
|
|
|
} else {
|
|
|
imx_uart_writel(sport, ucr1, UCR1);
|
|
|
- imx_dma_tx(sport);
|
|
|
+ imx_uart_dma_tx(sport);
|
|
|
}
|
|
|
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
while (!uart_circ_empty(xmit) &&
|
|
|
- !(imx_uart_readl(sport, uts_reg(sport)) & UTS_TXFULL)) {
|
|
|
+ !(imx_uart_readl(sport, imx_uart_uts_reg(sport)) & UTS_TXFULL)) {
|
|
|
/* send xmit->buf[xmit->tail]
|
|
|
* out the port here */
|
|
|
imx_uart_writel(sport, xmit->buf[xmit->tail], URTX0);
|
|
@@ -543,10 +543,10 @@ static inline void imx_transmit_buffer(struct imx_port *sport)
|
|
|
uart_write_wakeup(&sport->port);
|
|
|
|
|
|
if (uart_circ_empty(xmit))
|
|
|
- imx_stop_tx(&sport->port);
|
|
|
+ imx_uart_stop_tx(&sport->port);
|
|
|
}
|
|
|
|
|
|
-static void dma_tx_callback(void *data)
|
|
|
+static void imx_uart_dma_tx_callback(void *data)
|
|
|
{
|
|
|
struct imx_port *sport = data;
|
|
|
struct scatterlist *sgl = &sport->tx_sgl[0];
|
|
@@ -574,7 +574,7 @@ static void dma_tx_callback(void *data)
|
|
|
uart_write_wakeup(&sport->port);
|
|
|
|
|
|
if (!uart_circ_empty(xmit) && !uart_tx_stopped(&sport->port))
|
|
|
- imx_dma_tx(sport);
|
|
|
+ imx_uart_dma_tx(sport);
|
|
|
else if (sport->port.rs485.flags & SER_RS485_ENABLED) {
|
|
|
u32 ucr4 = imx_uart_readl(sport, UCR4);
|
|
|
ucr4 |= UCR4_TCEN;
|
|
@@ -585,7 +585,7 @@ static void dma_tx_callback(void *data)
|
|
|
}
|
|
|
|
|
|
/* called with port.lock taken and irqs off */
|
|
|
-static void imx_dma_tx(struct imx_port *sport)
|
|
|
+static void imx_uart_dma_tx(struct imx_port *sport)
|
|
|
{
|
|
|
struct circ_buf *xmit = &sport->port.state->xmit;
|
|
|
struct scatterlist *sgl = sport->tx_sgl;
|
|
@@ -628,7 +628,7 @@ static void imx_dma_tx(struct imx_port *sport)
|
|
|
dev_err(dev, "We cannot prepare for the TX slave dma!\n");
|
|
|
return;
|
|
|
}
|
|
|
- desc->callback = dma_tx_callback;
|
|
|
+ desc->callback = imx_uart_dma_tx_callback;
|
|
|
desc->callback_param = sport;
|
|
|
|
|
|
dev_dbg(dev, "TX: prepare to send %lu bytes by DMA.\n",
|
|
@@ -646,7 +646,7 @@ static void imx_dma_tx(struct imx_port *sport)
|
|
|
}
|
|
|
|
|
|
/* called with port.lock taken and irqs off */
|
|
|
-static void imx_start_tx(struct uart_port *port)
|
|
|
+static void imx_uart_start_tx(struct uart_port *port)
|
|
|
{
|
|
|
struct imx_port *sport = (struct imx_port *)port;
|
|
|
u32 ucr1;
|
|
@@ -659,13 +659,13 @@ static void imx_start_tx(struct uart_port *port)
|
|
|
|
|
|
ucr2 = imx_uart_readl(sport, UCR2);
|
|
|
if (port->rs485.flags & SER_RS485_RTS_ON_SEND)
|
|
|
- imx_port_rts_active(sport, &ucr2);
|
|
|
+ imx_uart_rts_active(sport, &ucr2);
|
|
|
else
|
|
|
- imx_port_rts_inactive(sport, &ucr2);
|
|
|
+ imx_uart_rts_inactive(sport, &ucr2);
|
|
|
imx_uart_writel(sport, ucr2, UCR2);
|
|
|
|
|
|
if (!(port->rs485.flags & SER_RS485_RX_DURING_TX))
|
|
|
- imx_stop_rx(port);
|
|
|
+ imx_uart_stop_rx(port);
|
|
|
|
|
|
/*
|
|
|
* Enable transmitter and shifter empty irq only if DMA is off.
|
|
@@ -696,12 +696,12 @@ static void imx_start_tx(struct uart_port *port)
|
|
|
|
|
|
if (!uart_circ_empty(&port->state->xmit) &&
|
|
|
!uart_tx_stopped(port))
|
|
|
- imx_dma_tx(sport);
|
|
|
+ imx_uart_dma_tx(sport);
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-static irqreturn_t imx_rtsint(int irq, void *dev_id)
|
|
|
+static irqreturn_t imx_uart_rtsint(int irq, void *dev_id)
|
|
|
{
|
|
|
struct imx_port *sport = dev_id;
|
|
|
u32 usr1;
|
|
@@ -718,18 +718,18 @@ static irqreturn_t imx_rtsint(int irq, void *dev_id)
|
|
|
return IRQ_HANDLED;
|
|
|
}
|
|
|
|
|
|
-static irqreturn_t imx_txint(int irq, void *dev_id)
|
|
|
+static irqreturn_t imx_uart_txint(int irq, void *dev_id)
|
|
|
{
|
|
|
struct imx_port *sport = dev_id;
|
|
|
unsigned long flags;
|
|
|
|
|
|
spin_lock_irqsave(&sport->port.lock, flags);
|
|
|
- imx_transmit_buffer(sport);
|
|
|
+ imx_uart_transmit_buffer(sport);
|
|
|
spin_unlock_irqrestore(&sport->port.lock, flags);
|
|
|
return IRQ_HANDLED;
|
|
|
}
|
|
|
|
|
|
-static irqreturn_t imx_rxint(int irq, void *dev_id)
|
|
|
+static irqreturn_t imx_uart_rxint(int irq, void *dev_id)
|
|
|
{
|
|
|
struct imx_port *sport = dev_id;
|
|
|
unsigned int rx, flg, ignored = 0;
|
|
@@ -801,12 +801,12 @@ out:
|
|
|
return IRQ_HANDLED;
|
|
|
}
|
|
|
|
|
|
-static void clear_rx_errors(struct imx_port *sport);
|
|
|
+static void imx_uart_clear_rx_errors(struct imx_port *sport);
|
|
|
|
|
|
/*
|
|
|
* We have a modem side uart, so the meanings of RTS and CTS are inverted.
|
|
|
*/
|
|
|
-static unsigned int imx_get_hwmctrl(struct imx_port *sport)
|
|
|
+static unsigned int imx_uart_get_hwmctrl(struct imx_port *sport)
|
|
|
{
|
|
|
unsigned int tmp = TIOCM_DSR;
|
|
|
unsigned usr1 = imx_uart_readl(sport, USR1);
|
|
@@ -829,11 +829,11 @@ static unsigned int imx_get_hwmctrl(struct imx_port *sport)
|
|
|
/*
|
|
|
* Handle any change of modem status signal since we were last called.
|
|
|
*/
|
|
|
-static void imx_mctrl_check(struct imx_port *sport)
|
|
|
+static void imx_uart_mctrl_check(struct imx_port *sport)
|
|
|
{
|
|
|
unsigned int status, changed;
|
|
|
|
|
|
- status = imx_get_hwmctrl(sport);
|
|
|
+ status = imx_uart_get_hwmctrl(sport);
|
|
|
changed = status ^ sport->old_status;
|
|
|
|
|
|
if (changed == 0)
|
|
@@ -853,7 +853,7 @@ static void imx_mctrl_check(struct imx_port *sport)
|
|
|
wake_up_interruptible(&sport->port.state->port.delta_msr_wait);
|
|
|
}
|
|
|
|
|
|
-static irqreturn_t imx_int(int irq, void *dev_id)
|
|
|
+static irqreturn_t imx_uart_int(int irq, void *dev_id)
|
|
|
{
|
|
|
struct imx_port *sport = dev_id;
|
|
|
unsigned int usr1, usr2, ucr1, ucr2, ucr3, ucr4;
|
|
@@ -892,12 +892,12 @@ static irqreturn_t imx_int(int irq, void *dev_id)
|
|
|
usr2 &= ~USR2_ORE;
|
|
|
|
|
|
if (usr1 & (USR1_RRDY | USR1_AGTIM)) {
|
|
|
- imx_rxint(irq, dev_id);
|
|
|
+ imx_uart_rxint(irq, dev_id);
|
|
|
ret = IRQ_HANDLED;
|
|
|
}
|
|
|
|
|
|
if ((usr1 & USR1_TRDY) || (usr2 & USR2_TXDC)) {
|
|
|
- imx_txint(irq, dev_id);
|
|
|
+ imx_uart_txint(irq, dev_id);
|
|
|
ret = IRQ_HANDLED;
|
|
|
}
|
|
|
|
|
@@ -907,14 +907,14 @@ static irqreturn_t imx_int(int irq, void *dev_id)
|
|
|
imx_uart_writel(sport, USR1_DTRD, USR1);
|
|
|
|
|
|
spin_lock_irqsave(&sport->port.lock, flags);
|
|
|
- imx_mctrl_check(sport);
|
|
|
+ imx_uart_mctrl_check(sport);
|
|
|
spin_unlock_irqrestore(&sport->port.lock, flags);
|
|
|
|
|
|
ret = IRQ_HANDLED;
|
|
|
}
|
|
|
|
|
|
if (usr1 & USR1_RTSD) {
|
|
|
- imx_rtsint(irq, dev_id);
|
|
|
+ imx_uart_rtsint(irq, dev_id);
|
|
|
ret = IRQ_HANDLED;
|
|
|
}
|
|
|
|
|
@@ -935,7 +935,7 @@ static irqreturn_t imx_int(int irq, void *dev_id)
|
|
|
/*
|
|
|
* Return TIOCSER_TEMT when transmitter is not busy.
|
|
|
*/
|
|
|
-static unsigned int imx_tx_empty(struct uart_port *port)
|
|
|
+static unsigned int imx_uart_tx_empty(struct uart_port *port)
|
|
|
{
|
|
|
struct imx_port *sport = (struct imx_port *)port;
|
|
|
unsigned int ret;
|
|
@@ -950,10 +950,10 @@ static unsigned int imx_tx_empty(struct uart_port *port)
|
|
|
}
|
|
|
|
|
|
/* called with port.lock taken and irqs off */
|
|
|
-static unsigned int imx_get_mctrl(struct uart_port *port)
|
|
|
+static unsigned int imx_uart_get_mctrl(struct uart_port *port)
|
|
|
{
|
|
|
struct imx_port *sport = (struct imx_port *)port;
|
|
|
- unsigned int ret = imx_get_hwmctrl(sport);
|
|
|
+ unsigned int ret = imx_uart_get_hwmctrl(sport);
|
|
|
|
|
|
mctrl_gpio_get(sport->gpios, &ret);
|
|
|
|
|
@@ -961,7 +961,7 @@ static unsigned int imx_get_mctrl(struct uart_port *port)
|
|
|
}
|
|
|
|
|
|
/* called with port.lock taken and irqs off */
|
|
|
-static void imx_set_mctrl(struct uart_port *port, unsigned int mctrl)
|
|
|
+static void imx_uart_set_mctrl(struct uart_port *port, unsigned int mctrl)
|
|
|
{
|
|
|
struct imx_port *sport = (struct imx_port *)port;
|
|
|
u32 ucr3, uts;
|
|
@@ -981,10 +981,10 @@ static void imx_set_mctrl(struct uart_port *port, unsigned int mctrl)
|
|
|
ucr3 |= UCR3_DSR;
|
|
|
imx_uart_writel(sport, ucr3, UCR3);
|
|
|
|
|
|
- uts = imx_uart_readl(sport, uts_reg(sport)) & ~UTS_LOOP;
|
|
|
+ uts = imx_uart_readl(sport, imx_uart_uts_reg(sport)) & ~UTS_LOOP;
|
|
|
if (mctrl & TIOCM_LOOP)
|
|
|
uts |= UTS_LOOP;
|
|
|
- imx_uart_writel(sport, uts, uts_reg(sport));
|
|
|
+ imx_uart_writel(sport, uts, imx_uart_uts_reg(sport));
|
|
|
|
|
|
mctrl_gpio_set(sport->gpios, mctrl);
|
|
|
}
|
|
@@ -992,7 +992,7 @@ static void imx_set_mctrl(struct uart_port *port, unsigned int mctrl)
|
|
|
/*
|
|
|
* Interrupts always disabled.
|
|
|
*/
|
|
|
-static void imx_break_ctl(struct uart_port *port, int break_state)
|
|
|
+static void imx_uart_break_ctl(struct uart_port *port, int break_state)
|
|
|
{
|
|
|
struct imx_port *sport = (struct imx_port *)port;
|
|
|
unsigned long flags;
|
|
@@ -1014,14 +1014,14 @@ static void imx_break_ctl(struct uart_port *port, int break_state)
|
|
|
* This is our per-port timeout handler, for checking the
|
|
|
* modem status signals.
|
|
|
*/
|
|
|
-static void imx_timeout(struct timer_list *t)
|
|
|
+static void imx_uart_timeout(struct timer_list *t)
|
|
|
{
|
|
|
struct imx_port *sport = from_timer(sport, t, timer);
|
|
|
unsigned long flags;
|
|
|
|
|
|
if (sport->port.state) {
|
|
|
spin_lock_irqsave(&sport->port.lock, flags);
|
|
|
- imx_mctrl_check(sport);
|
|
|
+ imx_uart_mctrl_check(sport);
|
|
|
spin_unlock_irqrestore(&sport->port.lock, flags);
|
|
|
|
|
|
mod_timer(&sport->timer, jiffies + MCTRL_TIMEOUT);
|
|
@@ -1038,7 +1038,7 @@ static void imx_timeout(struct timer_list *t)
|
|
|
* Condition [2] is triggered when a character has been sitting in the FIFO
|
|
|
* for at least 8 byte durations.
|
|
|
*/
|
|
|
-static void dma_rx_callback(void *data)
|
|
|
+static void imx_uart_dma_rx_callback(void *data)
|
|
|
{
|
|
|
struct imx_port *sport = data;
|
|
|
struct dma_chan *chan = sport->dma_chan_rx;
|
|
@@ -1054,7 +1054,7 @@ static void dma_rx_callback(void *data)
|
|
|
status = dmaengine_tx_status(chan, (dma_cookie_t)0, &state);
|
|
|
|
|
|
if (status == DMA_ERROR) {
|
|
|
- clear_rx_errors(sport);
|
|
|
+ imx_uart_clear_rx_errors(sport);
|
|
|
return;
|
|
|
}
|
|
|
|
|
@@ -1114,7 +1114,7 @@ static void dma_rx_callback(void *data)
|
|
|
/* RX DMA buffer periods */
|
|
|
#define RX_DMA_PERIODS 4
|
|
|
|
|
|
-static int start_rx_dma(struct imx_port *sport)
|
|
|
+static int imx_uart_start_rx_dma(struct imx_port *sport)
|
|
|
{
|
|
|
struct scatterlist *sgl = &sport->rx_sgl;
|
|
|
struct dma_chan *chan = sport->dma_chan_rx;
|
|
@@ -1142,7 +1142,7 @@ static int start_rx_dma(struct imx_port *sport)
|
|
|
dev_err(dev, "We cannot prepare for the RX slave dma!\n");
|
|
|
return -EINVAL;
|
|
|
}
|
|
|
- desc->callback = dma_rx_callback;
|
|
|
+ desc->callback = imx_uart_dma_rx_callback;
|
|
|
desc->callback_param = sport;
|
|
|
|
|
|
dev_dbg(dev, "RX: prepare for the DMA.\n");
|
|
@@ -1152,7 +1152,7 @@ static int start_rx_dma(struct imx_port *sport)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static void clear_rx_errors(struct imx_port *sport)
|
|
|
+static void imx_uart_clear_rx_errors(struct imx_port *sport)
|
|
|
{
|
|
|
struct tty_port *port = &sport->port.state->port;
|
|
|
u32 usr1, usr2;
|
|
@@ -1190,8 +1190,8 @@ static void clear_rx_errors(struct imx_port *sport)
|
|
|
#define TXTL_DMA 8 /* DMA burst setting */
|
|
|
#define RXTL_DMA 9 /* DMA burst setting */
|
|
|
|
|
|
-static void imx_setup_ufcr(struct imx_port *sport,
|
|
|
- unsigned char txwl, unsigned char rxwl)
|
|
|
+static void imx_uart_setup_ufcr(struct imx_port *sport,
|
|
|
+ unsigned char txwl, unsigned char rxwl)
|
|
|
{
|
|
|
unsigned int val;
|
|
|
|
|
@@ -1275,11 +1275,11 @@ err:
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
-static void imx_enable_dma(struct imx_port *sport)
|
|
|
+static void imx_uart_enable_dma(struct imx_port *sport)
|
|
|
{
|
|
|
u32 ucr1;
|
|
|
|
|
|
- imx_setup_ufcr(sport, TXTL_DMA, RXTL_DMA);
|
|
|
+ imx_uart_setup_ufcr(sport, TXTL_DMA, RXTL_DMA);
|
|
|
|
|
|
/* set UCR1 */
|
|
|
ucr1 = imx_uart_readl(sport, UCR1);
|
|
@@ -1289,7 +1289,7 @@ static void imx_enable_dma(struct imx_port *sport)
|
|
|
sport->dma_is_enabled = 1;
|
|
|
}
|
|
|
|
|
|
-static void imx_disable_dma(struct imx_port *sport)
|
|
|
+static void imx_uart_disable_dma(struct imx_port *sport)
|
|
|
{
|
|
|
u32 ucr1, ucr2;
|
|
|
|
|
@@ -1303,7 +1303,7 @@ static void imx_disable_dma(struct imx_port *sport)
|
|
|
ucr2 &= ~(UCR2_CTSC | UCR2_CTS | UCR2_ATEN);
|
|
|
imx_uart_writel(sport, ucr2, UCR2);
|
|
|
|
|
|
- imx_setup_ufcr(sport, TXTL_DEFAULT, RXTL_DEFAULT);
|
|
|
+ imx_uart_setup_ufcr(sport, TXTL_DEFAULT, RXTL_DEFAULT);
|
|
|
|
|
|
sport->dma_is_enabled = 0;
|
|
|
}
|
|
@@ -1311,7 +1311,7 @@ static void imx_disable_dma(struct imx_port *sport)
|
|
|
/* half the RX buffer size */
|
|
|
#define CTSTL 16
|
|
|
|
|
|
-static int imx_startup(struct uart_port *port)
|
|
|
+static int imx_uart_startup(struct uart_port *port)
|
|
|
{
|
|
|
struct imx_port *sport = (struct imx_port *)port;
|
|
|
int retval, i;
|
|
@@ -1328,7 +1328,7 @@ static int imx_startup(struct uart_port *port)
|
|
|
return retval;
|
|
|
}
|
|
|
|
|
|
- imx_setup_ufcr(sport, TXTL_DEFAULT, RXTL_DEFAULT);
|
|
|
+ imx_uart_setup_ufcr(sport, TXTL_DEFAULT, RXTL_DEFAULT);
|
|
|
|
|
|
/* disable the DREN bit (Data Ready interrupt enable) before
|
|
|
* requesting IRQs
|
|
@@ -1382,11 +1382,11 @@ static int imx_startup(struct uart_port *port)
|
|
|
* make sure the edge sensitive RTS-irq is disabled,
|
|
|
* we're using RTSD instead.
|
|
|
*/
|
|
|
- if (!is_imx1_uart(sport))
|
|
|
+ if (!imx_uart_is_imx1(sport))
|
|
|
ucr2 &= ~UCR2_RTSEN;
|
|
|
imx_uart_writel(sport, ucr2, UCR2);
|
|
|
|
|
|
- if (!is_imx1_uart(sport)) {
|
|
|
+ if (!imx_uart_is_imx1(sport)) {
|
|
|
u32 ucr3;
|
|
|
|
|
|
ucr3 = imx_uart_readl(sport, UCR3);
|
|
@@ -1403,11 +1403,11 @@ static int imx_startup(struct uart_port *port)
|
|
|
/*
|
|
|
* Enable modem status interrupts
|
|
|
*/
|
|
|
- imx_enable_ms(&sport->port);
|
|
|
+ imx_uart_enable_ms(&sport->port);
|
|
|
|
|
|
if (dma_is_inited) {
|
|
|
- imx_enable_dma(sport);
|
|
|
- start_rx_dma(sport);
|
|
|
+ imx_uart_enable_dma(sport);
|
|
|
+ imx_uart_start_rx_dma(sport);
|
|
|
} else {
|
|
|
ucr1 = imx_uart_readl(sport, UCR1);
|
|
|
ucr1 |= UCR1_RRDYEN;
|
|
@@ -1423,7 +1423,7 @@ static int imx_startup(struct uart_port *port)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static void imx_shutdown(struct uart_port *port)
|
|
|
+static void imx_uart_shutdown(struct uart_port *port)
|
|
|
{
|
|
|
struct imx_port *sport = (struct imx_port *)port;
|
|
|
unsigned long flags;
|
|
@@ -1436,9 +1436,9 @@ static void imx_shutdown(struct uart_port *port)
|
|
|
dmaengine_terminate_sync(sport->dma_chan_rx);
|
|
|
|
|
|
spin_lock_irqsave(&sport->port.lock, flags);
|
|
|
- imx_stop_tx(port);
|
|
|
- imx_stop_rx(port);
|
|
|
- imx_disable_dma(sport);
|
|
|
+ imx_uart_stop_tx(port);
|
|
|
+ imx_uart_stop_rx(port);
|
|
|
+ imx_uart_disable_dma(sport);
|
|
|
spin_unlock_irqrestore(&sport->port.lock, flags);
|
|
|
imx_uart_dma_exit(sport);
|
|
|
}
|
|
@@ -1472,7 +1472,7 @@ static void imx_shutdown(struct uart_port *port)
|
|
|
}
|
|
|
|
|
|
/* called with port.lock taken and irqs off */
|
|
|
-static void imx_flush_buffer(struct uart_port *port)
|
|
|
+static void imx_uart_flush_buffer(struct uart_port *port)
|
|
|
{
|
|
|
struct imx_port *sport = (struct imx_port *)port;
|
|
|
struct scatterlist *sgl = &sport->tx_sgl[0];
|
|
@@ -1524,8 +1524,8 @@ static void imx_flush_buffer(struct uart_port *port)
|
|
|
}
|
|
|
|
|
|
static void
|
|
|
-imx_set_termios(struct uart_port *port, struct ktermios *termios,
|
|
|
- struct ktermios *old)
|
|
|
+imx_uart_set_termios(struct uart_port *port, struct ktermios *termios,
|
|
|
+ struct ktermios *old)
|
|
|
{
|
|
|
struct imx_port *sport = (struct imx_port *)port;
|
|
|
unsigned long flags;
|
|
@@ -1563,11 +1563,11 @@ imx_set_termios(struct uart_port *port, struct ktermios *termios,
|
|
|
*/
|
|
|
if (port->rs485.flags &
|
|
|
SER_RS485_RTS_AFTER_SEND)
|
|
|
- imx_port_rts_active(sport, &ucr2);
|
|
|
+ imx_uart_rts_active(sport, &ucr2);
|
|
|
else
|
|
|
- imx_port_rts_inactive(sport, &ucr2);
|
|
|
+ imx_uart_rts_inactive(sport, &ucr2);
|
|
|
} else {
|
|
|
- imx_port_rts_auto(sport, &ucr2);
|
|
|
+ imx_uart_rts_auto(sport, &ucr2);
|
|
|
}
|
|
|
} else {
|
|
|
termios->c_cflag &= ~CRTSCTS;
|
|
@@ -1575,9 +1575,9 @@ imx_set_termios(struct uart_port *port, struct ktermios *termios,
|
|
|
} else if (port->rs485.flags & SER_RS485_ENABLED) {
|
|
|
/* disable transmitter */
|
|
|
if (port->rs485.flags & SER_RS485_RTS_AFTER_SEND)
|
|
|
- imx_port_rts_active(sport, &ucr2);
|
|
|
+ imx_uart_rts_active(sport, &ucr2);
|
|
|
else
|
|
|
- imx_port_rts_inactive(sport, &ucr2);
|
|
|
+ imx_uart_rts_inactive(sport, &ucr2);
|
|
|
}
|
|
|
|
|
|
|
|
@@ -1676,7 +1676,7 @@ imx_set_termios(struct uart_port *port, struct ktermios *termios,
|
|
|
imx_uart_writel(sport, num, UBIR);
|
|
|
imx_uart_writel(sport, denom, UBMR);
|
|
|
|
|
|
- if (!is_imx1_uart(sport))
|
|
|
+ if (!imx_uart_is_imx1(sport))
|
|
|
imx_uart_writel(sport, sport->port.uartclk / div / 1000,
|
|
|
IMX21_ONEMS);
|
|
|
|
|
@@ -1686,12 +1686,12 @@ imx_set_termios(struct uart_port *port, struct ktermios *termios,
|
|
|
imx_uart_writel(sport, ucr2 | old_ucr2, UCR2);
|
|
|
|
|
|
if (UART_ENABLE_MS(&sport->port, termios->c_cflag))
|
|
|
- imx_enable_ms(&sport->port);
|
|
|
+ imx_uart_enable_ms(&sport->port);
|
|
|
|
|
|
spin_unlock_irqrestore(&sport->port.lock, flags);
|
|
|
}
|
|
|
|
|
|
-static const char *imx_type(struct uart_port *port)
|
|
|
+static const char *imx_uart_type(struct uart_port *port)
|
|
|
{
|
|
|
struct imx_port *sport = (struct imx_port *)port;
|
|
|
|
|
@@ -1701,7 +1701,7 @@ static const char *imx_type(struct uart_port *port)
|
|
|
/*
|
|
|
* Configure/autoconfigure the port.
|
|
|
*/
|
|
|
-static void imx_config_port(struct uart_port *port, int flags)
|
|
|
+static void imx_uart_config_port(struct uart_port *port, int flags)
|
|
|
{
|
|
|
struct imx_port *sport = (struct imx_port *)port;
|
|
|
|
|
@@ -1715,7 +1715,7 @@ static void imx_config_port(struct uart_port *port, int flags)
|
|
|
* even then only between PORT_IMX and PORT_UNKNOWN
|
|
|
*/
|
|
|
static int
|
|
|
-imx_verify_port(struct uart_port *port, struct serial_struct *ser)
|
|
|
+imx_uart_verify_port(struct uart_port *port, struct serial_struct *ser)
|
|
|
{
|
|
|
struct imx_port *sport = (struct imx_port *)port;
|
|
|
int ret = 0;
|
|
@@ -1739,7 +1739,7 @@ imx_verify_port(struct uart_port *port, struct serial_struct *ser)
|
|
|
|
|
|
#if defined(CONFIG_CONSOLE_POLL)
|
|
|
|
|
|
-static int imx_poll_init(struct uart_port *port)
|
|
|
+static int imx_uart_poll_init(struct uart_port *port)
|
|
|
{
|
|
|
struct imx_port *sport = (struct imx_port *)port;
|
|
|
unsigned long flags;
|
|
@@ -1753,7 +1753,7 @@ static int imx_poll_init(struct uart_port *port)
|
|
|
if (retval)
|
|
|
clk_disable_unprepare(sport->clk_ipg);
|
|
|
|
|
|
- imx_setup_ufcr(sport, TXTL_DEFAULT, RXTL_DEFAULT);
|
|
|
+ imx_uart_setup_ufcr(sport, TXTL_DEFAULT, RXTL_DEFAULT);
|
|
|
|
|
|
spin_lock_irqsave(&sport->port.lock, flags);
|
|
|
|
|
@@ -1767,7 +1767,7 @@ static int imx_poll_init(struct uart_port *port)
|
|
|
ucr1 = imx_uart_readl(sport, UCR1);
|
|
|
ucr2 = imx_uart_readl(sport, UCR2);
|
|
|
|
|
|
- if (is_imx1_uart(sport))
|
|
|
+ if (imx_uart_is_imx1(sport))
|
|
|
ucr1 |= IMX1_UCR1_UARTCLKEN;
|
|
|
|
|
|
ucr1 |= UCR1_UARTEN;
|
|
@@ -1788,7 +1788,7 @@ static int imx_poll_init(struct uart_port *port)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static int imx_poll_get_char(struct uart_port *port)
|
|
|
+static int imx_uart_poll_get_char(struct uart_port *port)
|
|
|
{
|
|
|
struct imx_port *sport = (struct imx_port *)port;
|
|
|
if (!(imx_uart_readl(sport, USR2) & USR2_RDR))
|
|
@@ -1797,7 +1797,7 @@ static int imx_poll_get_char(struct uart_port *port)
|
|
|
return imx_uart_readl(sport, URXD0) & URXD_RX_DATA;
|
|
|
}
|
|
|
|
|
|
-static void imx_poll_put_char(struct uart_port *port, unsigned char c)
|
|
|
+static void imx_uart_poll_put_char(struct uart_port *port, unsigned char c)
|
|
|
{
|
|
|
struct imx_port *sport = (struct imx_port *)port;
|
|
|
unsigned int status;
|
|
@@ -1818,8 +1818,8 @@ static void imx_poll_put_char(struct uart_port *port, unsigned char c)
|
|
|
#endif
|
|
|
|
|
|
/* called with port.lock taken and irqs off or from .probe without locking */
|
|
|
-static int imx_rs485_config(struct uart_port *port,
|
|
|
- struct serial_rs485 *rs485conf)
|
|
|
+static int imx_uart_rs485_config(struct uart_port *port,
|
|
|
+ struct serial_rs485 *rs485conf)
|
|
|
{
|
|
|
struct imx_port *sport = (struct imx_port *)port;
|
|
|
u32 ucr2;
|
|
@@ -1836,53 +1836,53 @@ static int imx_rs485_config(struct uart_port *port,
|
|
|
/* disable transmitter */
|
|
|
ucr2 = imx_uart_readl(sport, UCR2);
|
|
|
if (rs485conf->flags & SER_RS485_RTS_AFTER_SEND)
|
|
|
- imx_port_rts_active(sport, &ucr2);
|
|
|
+ imx_uart_rts_active(sport, &ucr2);
|
|
|
else
|
|
|
- imx_port_rts_inactive(sport, &ucr2);
|
|
|
+ imx_uart_rts_inactive(sport, &ucr2);
|
|
|
imx_uart_writel(sport, ucr2, UCR2);
|
|
|
}
|
|
|
|
|
|
/* Make sure Rx is enabled in case Tx is active with Rx disabled */
|
|
|
if (!(rs485conf->flags & SER_RS485_ENABLED) ||
|
|
|
rs485conf->flags & SER_RS485_RX_DURING_TX)
|
|
|
- imx_start_rx(port);
|
|
|
+ imx_uart_start_rx(port);
|
|
|
|
|
|
port->rs485 = *rs485conf;
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static const struct uart_ops imx_pops = {
|
|
|
- .tx_empty = imx_tx_empty,
|
|
|
- .set_mctrl = imx_set_mctrl,
|
|
|
- .get_mctrl = imx_get_mctrl,
|
|
|
- .stop_tx = imx_stop_tx,
|
|
|
- .start_tx = imx_start_tx,
|
|
|
- .stop_rx = imx_stop_rx,
|
|
|
- .enable_ms = imx_enable_ms,
|
|
|
- .break_ctl = imx_break_ctl,
|
|
|
- .startup = imx_startup,
|
|
|
- .shutdown = imx_shutdown,
|
|
|
- .flush_buffer = imx_flush_buffer,
|
|
|
- .set_termios = imx_set_termios,
|
|
|
- .type = imx_type,
|
|
|
- .config_port = imx_config_port,
|
|
|
- .verify_port = imx_verify_port,
|
|
|
+static const struct uart_ops imx_uart_pops = {
|
|
|
+ .tx_empty = imx_uart_tx_empty,
|
|
|
+ .set_mctrl = imx_uart_set_mctrl,
|
|
|
+ .get_mctrl = imx_uart_get_mctrl,
|
|
|
+ .stop_tx = imx_uart_stop_tx,
|
|
|
+ .start_tx = imx_uart_start_tx,
|
|
|
+ .stop_rx = imx_uart_stop_rx,
|
|
|
+ .enable_ms = imx_uart_enable_ms,
|
|
|
+ .break_ctl = imx_uart_break_ctl,
|
|
|
+ .startup = imx_uart_startup,
|
|
|
+ .shutdown = imx_uart_shutdown,
|
|
|
+ .flush_buffer = imx_uart_flush_buffer,
|
|
|
+ .set_termios = imx_uart_set_termios,
|
|
|
+ .type = imx_uart_type,
|
|
|
+ .config_port = imx_uart_config_port,
|
|
|
+ .verify_port = imx_uart_verify_port,
|
|
|
#if defined(CONFIG_CONSOLE_POLL)
|
|
|
- .poll_init = imx_poll_init,
|
|
|
- .poll_get_char = imx_poll_get_char,
|
|
|
- .poll_put_char = imx_poll_put_char,
|
|
|
+ .poll_init = imx_uart_poll_init,
|
|
|
+ .poll_get_char = imx_uart_poll_get_char,
|
|
|
+ .poll_put_char = imx_uart_poll_put_char,
|
|
|
#endif
|
|
|
};
|
|
|
|
|
|
-static struct imx_port *imx_ports[UART_NR];
|
|
|
+static struct imx_port *imx_uart_ports[UART_NR];
|
|
|
|
|
|
#ifdef CONFIG_SERIAL_IMX_CONSOLE
|
|
|
-static void imx_console_putchar(struct uart_port *port, int ch)
|
|
|
+static void imx_uart_console_putchar(struct uart_port *port, int ch)
|
|
|
{
|
|
|
struct imx_port *sport = (struct imx_port *)port;
|
|
|
|
|
|
- while (imx_uart_readl(sport, uts_reg(sport)) & UTS_TXFULL)
|
|
|
+ while (imx_uart_readl(sport, imx_uart_uts_reg(sport)) & UTS_TXFULL)
|
|
|
barrier();
|
|
|
|
|
|
imx_uart_writel(sport, ch, URTX0);
|
|
@@ -1892,9 +1892,9 @@ static void imx_console_putchar(struct uart_port *port, int ch)
|
|
|
* Interrupts are disabled on entering
|
|
|
*/
|
|
|
static void
|
|
|
-imx_console_write(struct console *co, const char *s, unsigned int count)
|
|
|
+imx_uart_console_write(struct console *co, const char *s, unsigned int count)
|
|
|
{
|
|
|
- struct imx_port *sport = imx_ports[co->index];
|
|
|
+ struct imx_port *sport = imx_uart_ports[co->index];
|
|
|
struct imx_port_ucrs old_ucr;
|
|
|
unsigned int ucr1;
|
|
|
unsigned long flags = 0;
|
|
@@ -1920,10 +1920,10 @@ imx_console_write(struct console *co, const char *s, unsigned int count)
|
|
|
/*
|
|
|
* First, save UCR1/2/3 and then disable interrupts
|
|
|
*/
|
|
|
- imx_port_ucrs_save(sport, &old_ucr);
|
|
|
+ imx_uart_ucrs_save(sport, &old_ucr);
|
|
|
ucr1 = old_ucr.ucr1;
|
|
|
|
|
|
- if (is_imx1_uart(sport))
|
|
|
+ if (imx_uart_is_imx1(sport))
|
|
|
ucr1 |= IMX1_UCR1_UARTCLKEN;
|
|
|
ucr1 |= UCR1_UARTEN;
|
|
|
ucr1 &= ~(UCR1_TXMPTYEN | UCR1_RRDYEN | UCR1_RTSDEN);
|
|
@@ -1932,7 +1932,7 @@ imx_console_write(struct console *co, const char *s, unsigned int count)
|
|
|
|
|
|
imx_uart_writel(sport, old_ucr.ucr2 | UCR2_TXEN, UCR2);
|
|
|
|
|
|
- uart_console_write(&sport->port, s, count, imx_console_putchar);
|
|
|
+ uart_console_write(&sport->port, s, count, imx_uart_console_putchar);
|
|
|
|
|
|
/*
|
|
|
* Finally, wait for transmitter to become empty
|
|
@@ -1940,7 +1940,7 @@ imx_console_write(struct console *co, const char *s, unsigned int count)
|
|
|
*/
|
|
|
while (!(imx_uart_readl(sport, USR2) & USR2_TXDC));
|
|
|
|
|
|
- imx_port_ucrs_restore(sport, &old_ucr);
|
|
|
+ imx_uart_ucrs_restore(sport, &old_ucr);
|
|
|
|
|
|
if (locked)
|
|
|
spin_unlock_irqrestore(&sport->port.lock, flags);
|
|
@@ -1954,8 +1954,8 @@ imx_console_write(struct console *co, const char *s, unsigned int count)
|
|
|
* try to determine the current setup.
|
|
|
*/
|
|
|
static void __init
|
|
|
-imx_console_get_options(struct imx_port *sport, int *baud,
|
|
|
- int *parity, int *bits)
|
|
|
+imx_uart_console_get_options(struct imx_port *sport, int *baud,
|
|
|
+ int *parity, int *bits)
|
|
|
{
|
|
|
|
|
|
if (imx_uart_readl(sport, UCR1) & UCR1_UARTEN) {
|
|
@@ -2013,7 +2013,7 @@ imx_console_get_options(struct imx_port *sport, int *baud,
|
|
|
}
|
|
|
|
|
|
static int __init
|
|
|
-imx_console_setup(struct console *co, char *options)
|
|
|
+imx_uart_console_setup(struct console *co, char *options)
|
|
|
{
|
|
|
struct imx_port *sport;
|
|
|
int baud = 9600;
|
|
@@ -2027,9 +2027,9 @@ imx_console_setup(struct console *co, char *options)
|
|
|
* if so, search for the first available port that does have
|
|
|
* console support.
|
|
|
*/
|
|
|
- if (co->index == -1 || co->index >= ARRAY_SIZE(imx_ports))
|
|
|
+ if (co->index == -1 || co->index >= ARRAY_SIZE(imx_uart_ports))
|
|
|
co->index = 0;
|
|
|
- sport = imx_ports[co->index];
|
|
|
+ sport = imx_uart_ports[co->index];
|
|
|
if (sport == NULL)
|
|
|
return -ENODEV;
|
|
|
|
|
@@ -2041,9 +2041,9 @@ imx_console_setup(struct console *co, char *options)
|
|
|
if (options)
|
|
|
uart_parse_options(options, &baud, &parity, &bits, &flow);
|
|
|
else
|
|
|
- imx_console_get_options(sport, &baud, &parity, &bits);
|
|
|
+ imx_uart_console_get_options(sport, &baud, &parity, &bits);
|
|
|
|
|
|
- imx_setup_ufcr(sport, TXTL_DEFAULT, RXTL_DEFAULT);
|
|
|
+ imx_uart_setup_ufcr(sport, TXTL_DEFAULT, RXTL_DEFAULT);
|
|
|
|
|
|
retval = uart_set_options(&sport->port, co, baud, parity, bits, flow);
|
|
|
|
|
@@ -2061,21 +2061,21 @@ error_console:
|
|
|
return retval;
|
|
|
}
|
|
|
|
|
|
-static struct uart_driver imx_reg;
|
|
|
-static struct console imx_console = {
|
|
|
+static struct uart_driver imx_uart_uart_driver;
|
|
|
+static struct console imx_uart_console = {
|
|
|
.name = DEV_NAME,
|
|
|
- .write = imx_console_write,
|
|
|
+ .write = imx_uart_console_write,
|
|
|
.device = uart_console_device,
|
|
|
- .setup = imx_console_setup,
|
|
|
+ .setup = imx_uart_console_setup,
|
|
|
.flags = CON_PRINTBUFFER,
|
|
|
.index = -1,
|
|
|
- .data = &imx_reg,
|
|
|
+ .data = &imx_uart_uart_driver,
|
|
|
};
|
|
|
|
|
|
-#define IMX_CONSOLE &imx_console
|
|
|
+#define IMX_CONSOLE &imx_uart_console
|
|
|
|
|
|
#ifdef CONFIG_OF
|
|
|
-static void imx_console_early_putchar(struct uart_port *port, int ch)
|
|
|
+static void imx_uart_console_early_putchar(struct uart_port *port, int ch)
|
|
|
{
|
|
|
struct imx_port *sport = (struct imx_port *)port;
|
|
|
|
|
@@ -2085,12 +2085,12 @@ static void imx_console_early_putchar(struct uart_port *port, int ch)
|
|
|
imx_uart_writel(sport, ch, URTX0);
|
|
|
}
|
|
|
|
|
|
-static void imx_console_early_write(struct console *con, const char *s,
|
|
|
- unsigned count)
|
|
|
+static void imx_uart_console_early_write(struct console *con, const char *s,
|
|
|
+ unsigned count)
|
|
|
{
|
|
|
struct earlycon_device *dev = con->data;
|
|
|
|
|
|
- uart_console_write(&dev->port, s, count, imx_console_early_putchar);
|
|
|
+ uart_console_write(&dev->port, s, count, imx_uart_console_early_putchar);
|
|
|
}
|
|
|
|
|
|
static int __init
|
|
@@ -2099,7 +2099,7 @@ imx_console_early_setup(struct earlycon_device *dev, const char *opt)
|
|
|
if (!dev->port.membase)
|
|
|
return -ENODEV;
|
|
|
|
|
|
- dev->con->write = imx_console_early_write;
|
|
|
+ dev->con->write = imx_uart_console_early_write;
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
@@ -2111,13 +2111,13 @@ OF_EARLYCON_DECLARE(ec_imx21, "fsl,imx21-uart", imx_console_early_setup);
|
|
|
#define IMX_CONSOLE NULL
|
|
|
#endif
|
|
|
|
|
|
-static struct uart_driver imx_reg = {
|
|
|
+static struct uart_driver imx_uart_uart_driver = {
|
|
|
.owner = THIS_MODULE,
|
|
|
.driver_name = DRIVER_NAME,
|
|
|
.dev_name = DEV_NAME,
|
|
|
.major = SERIAL_IMX_MAJOR,
|
|
|
.minor = MINOR_START,
|
|
|
- .nr = ARRAY_SIZE(imx_ports),
|
|
|
+ .nr = ARRAY_SIZE(imx_uart_ports),
|
|
|
.cons = IMX_CONSOLE,
|
|
|
};
|
|
|
|
|
@@ -2126,8 +2126,8 @@ static struct uart_driver imx_reg = {
|
|
|
* This function returns 1 iff pdev isn't a device instatiated by dt, 0 iff it
|
|
|
* could successfully get all information from dt or a negative errno.
|
|
|
*/
|
|
|
-static int serial_imx_probe_dt(struct imx_port *sport,
|
|
|
- struct platform_device *pdev)
|
|
|
+static int imx_uart_probe_dt(struct imx_port *sport,
|
|
|
+ struct platform_device *pdev)
|
|
|
{
|
|
|
struct device_node *np = pdev->dev.of_node;
|
|
|
int ret;
|
|
@@ -2157,15 +2157,15 @@ static int serial_imx_probe_dt(struct imx_port *sport,
|
|
|
return 0;
|
|
|
}
|
|
|
#else
|
|
|
-static inline int serial_imx_probe_dt(struct imx_port *sport,
|
|
|
- struct platform_device *pdev)
|
|
|
+static inline int imx_uart_probe_dt(struct imx_port *sport,
|
|
|
+ struct platform_device *pdev)
|
|
|
{
|
|
|
return 1;
|
|
|
}
|
|
|
#endif
|
|
|
|
|
|
-static void serial_imx_probe_pdata(struct imx_port *sport,
|
|
|
- struct platform_device *pdev)
|
|
|
+static void imx_uart_probe_pdata(struct imx_port *sport,
|
|
|
+ struct platform_device *pdev)
|
|
|
{
|
|
|
struct imxuart_platform_data *pdata = dev_get_platdata(&pdev->dev);
|
|
|
|
|
@@ -2179,7 +2179,7 @@ static void serial_imx_probe_pdata(struct imx_port *sport,
|
|
|
sport->have_rtscts = 1;
|
|
|
}
|
|
|
|
|
|
-static int serial_imx_probe(struct platform_device *pdev)
|
|
|
+static int imx_uart_probe(struct platform_device *pdev)
|
|
|
{
|
|
|
struct imx_port *sport;
|
|
|
void __iomem *base;
|
|
@@ -2192,13 +2192,13 @@ static int serial_imx_probe(struct platform_device *pdev)
|
|
|
if (!sport)
|
|
|
return -ENOMEM;
|
|
|
|
|
|
- ret = serial_imx_probe_dt(sport, pdev);
|
|
|
+ ret = imx_uart_probe_dt(sport, pdev);
|
|
|
if (ret > 0)
|
|
|
- serial_imx_probe_pdata(sport, pdev);
|
|
|
+ imx_uart_probe_pdata(sport, pdev);
|
|
|
else if (ret < 0)
|
|
|
return ret;
|
|
|
|
|
|
- if (sport->port.line >= ARRAY_SIZE(imx_ports)) {
|
|
|
+ if (sport->port.line >= ARRAY_SIZE(imx_uart_ports)) {
|
|
|
dev_err(&pdev->dev, "serial%d out of range\n",
|
|
|
sport->port.line);
|
|
|
return -EINVAL;
|
|
@@ -2220,10 +2220,10 @@ static int serial_imx_probe(struct platform_device *pdev)
|
|
|
sport->port.iotype = UPIO_MEM;
|
|
|
sport->port.irq = rxirq;
|
|
|
sport->port.fifosize = 32;
|
|
|
- sport->port.ops = &imx_pops;
|
|
|
- sport->port.rs485_config = imx_rs485_config;
|
|
|
+ sport->port.ops = &imx_uart_pops;
|
|
|
+ sport->port.rs485_config = imx_uart_rs485_config;
|
|
|
sport->port.flags = UPF_BOOT_AUTOCONF;
|
|
|
- timer_setup(&sport->timer, imx_timeout, 0);
|
|
|
+ timer_setup(&sport->timer, imx_uart_timeout, 0);
|
|
|
|
|
|
sport->gpios = mctrl_gpio_init(&sport->port, 0);
|
|
|
if (IS_ERR(sport->gpios))
|
|
@@ -2265,7 +2265,7 @@ static int serial_imx_probe(struct platform_device *pdev)
|
|
|
(!sport->have_rtscts || !sport->have_rtsgpio))
|
|
|
dev_err(&pdev->dev, "no RTS control, disabling rs485\n");
|
|
|
|
|
|
- imx_rs485_config(&sport->port, &sport->port.rs485);
|
|
|
+ imx_uart_rs485_config(&sport->port, &sport->port.rs485);
|
|
|
|
|
|
/* Disable interrupts before requesting them */
|
|
|
ucr1 = imx_uart_readl(sport, UCR1);
|
|
@@ -2273,7 +2273,7 @@ static int serial_imx_probe(struct platform_device *pdev)
|
|
|
UCR1_TXMPTYEN | UCR1_RTSDEN);
|
|
|
imx_uart_writel(sport, ucr1, UCR1);
|
|
|
|
|
|
- if (!is_imx1_uart(sport) && sport->dte_mode) {
|
|
|
+ if (!imx_uart_is_imx1(sport) && sport->dte_mode) {
|
|
|
/*
|
|
|
* The DCEDTE bit changes the direction of DSR, DCD, DTR and RI
|
|
|
* and influences if UCR3_RI and UCR3_DCD changes the level of RI
|
|
@@ -2299,7 +2299,7 @@ static int serial_imx_probe(struct platform_device *pdev)
|
|
|
if (ufcr & UFCR_DCEDTE)
|
|
|
imx_uart_writel(sport, ufcr & ~UFCR_DCEDTE, UFCR);
|
|
|
|
|
|
- if (!is_imx1_uart(sport))
|
|
|
+ if (!imx_uart_is_imx1(sport))
|
|
|
ucr3 |= IMX21_UCR3_RXDMUXSEL | UCR3_ADNIMP;
|
|
|
imx_uart_writel(sport, ucr3, UCR3);
|
|
|
}
|
|
@@ -2311,7 +2311,7 @@ static int serial_imx_probe(struct platform_device *pdev)
|
|
|
* chips only have one interrupt.
|
|
|
*/
|
|
|
if (txirq > 0) {
|
|
|
- ret = devm_request_irq(&pdev->dev, rxirq, imx_rxint, 0,
|
|
|
+ ret = devm_request_irq(&pdev->dev, rxirq, imx_uart_rxint, 0,
|
|
|
dev_name(&pdev->dev), sport);
|
|
|
if (ret) {
|
|
|
dev_err(&pdev->dev, "failed to request rx irq: %d\n",
|
|
@@ -2319,7 +2319,7 @@ static int serial_imx_probe(struct platform_device *pdev)
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
- ret = devm_request_irq(&pdev->dev, txirq, imx_txint, 0,
|
|
|
+ ret = devm_request_irq(&pdev->dev, txirq, imx_uart_txint, 0,
|
|
|
dev_name(&pdev->dev), sport);
|
|
|
if (ret) {
|
|
|
dev_err(&pdev->dev, "failed to request tx irq: %d\n",
|
|
@@ -2327,7 +2327,7 @@ static int serial_imx_probe(struct platform_device *pdev)
|
|
|
return ret;
|
|
|
}
|
|
|
} else {
|
|
|
- ret = devm_request_irq(&pdev->dev, rxirq, imx_int, 0,
|
|
|
+ ret = devm_request_irq(&pdev->dev, rxirq, imx_uart_int, 0,
|
|
|
dev_name(&pdev->dev), sport);
|
|
|
if (ret) {
|
|
|
dev_err(&pdev->dev, "failed to request irq: %d\n", ret);
|
|
@@ -2335,21 +2335,21 @@ static int serial_imx_probe(struct platform_device *pdev)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- imx_ports[sport->port.line] = sport;
|
|
|
+ imx_uart_ports[sport->port.line] = sport;
|
|
|
|
|
|
platform_set_drvdata(pdev, sport);
|
|
|
|
|
|
- return uart_add_one_port(&imx_reg, &sport->port);
|
|
|
+ return uart_add_one_port(&imx_uart_uart_driver, &sport->port);
|
|
|
}
|
|
|
|
|
|
-static int serial_imx_remove(struct platform_device *pdev)
|
|
|
+static int imx_uart_remove(struct platform_device *pdev)
|
|
|
{
|
|
|
struct imx_port *sport = platform_get_drvdata(pdev);
|
|
|
|
|
|
- return uart_remove_one_port(&imx_reg, &sport->port);
|
|
|
+ return uart_remove_one_port(&imx_uart_uart_driver, &sport->port);
|
|
|
}
|
|
|
|
|
|
-static void serial_imx_restore_context(struct imx_port *sport)
|
|
|
+static void imx_uart_restore_context(struct imx_port *sport)
|
|
|
{
|
|
|
if (!sport->context_saved)
|
|
|
return;
|
|
@@ -2367,7 +2367,7 @@ static void serial_imx_restore_context(struct imx_port *sport)
|
|
|
sport->context_saved = false;
|
|
|
}
|
|
|
|
|
|
-static void serial_imx_save_context(struct imx_port *sport)
|
|
|
+static void imx_uart_save_context(struct imx_port *sport)
|
|
|
{
|
|
|
/* Save necessary regs */
|
|
|
sport->saved_reg[0] = imx_uart_readl(sport, UCR1);
|
|
@@ -2383,7 +2383,7 @@ static void serial_imx_save_context(struct imx_port *sport)
|
|
|
sport->context_saved = true;
|
|
|
}
|
|
|
|
|
|
-static void serial_imx_enable_wakeup(struct imx_port *sport, bool on)
|
|
|
+static void imx_uart_enable_wakeup(struct imx_port *sport, bool on)
|
|
|
{
|
|
|
u32 ucr3;
|
|
|
|
|
@@ -2406,19 +2406,19 @@ static void serial_imx_enable_wakeup(struct imx_port *sport, bool on)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-static int imx_serial_port_suspend_noirq(struct device *dev)
|
|
|
+static int imx_uart_suspend_noirq(struct device *dev)
|
|
|
{
|
|
|
struct platform_device *pdev = to_platform_device(dev);
|
|
|
struct imx_port *sport = platform_get_drvdata(pdev);
|
|
|
|
|
|
- serial_imx_save_context(sport);
|
|
|
+ imx_uart_save_context(sport);
|
|
|
|
|
|
clk_disable(sport->clk_ipg);
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static int imx_serial_port_resume_noirq(struct device *dev)
|
|
|
+static int imx_uart_resume_noirq(struct device *dev)
|
|
|
{
|
|
|
struct platform_device *pdev = to_platform_device(dev);
|
|
|
struct imx_port *sport = platform_get_drvdata(pdev);
|
|
@@ -2428,18 +2428,18 @@ static int imx_serial_port_resume_noirq(struct device *dev)
|
|
|
if (ret)
|
|
|
return ret;
|
|
|
|
|
|
- serial_imx_restore_context(sport);
|
|
|
+ imx_uart_restore_context(sport);
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static int imx_serial_port_suspend(struct device *dev)
|
|
|
+static int imx_uart_suspend(struct device *dev)
|
|
|
{
|
|
|
struct platform_device *pdev = to_platform_device(dev);
|
|
|
struct imx_port *sport = platform_get_drvdata(pdev);
|
|
|
int ret;
|
|
|
|
|
|
- uart_suspend_port(&imx_reg, &sport->port);
|
|
|
+ uart_suspend_port(&imx_uart_uart_driver, &sport->port);
|
|
|
disable_irq(sport->port.irq);
|
|
|
|
|
|
ret = clk_prepare_enable(sport->clk_ipg);
|
|
@@ -2447,20 +2447,20 @@ static int imx_serial_port_suspend(struct device *dev)
|
|
|
return ret;
|
|
|
|
|
|
/* enable wakeup from i.MX UART */
|
|
|
- serial_imx_enable_wakeup(sport, true);
|
|
|
+ imx_uart_enable_wakeup(sport, true);
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static int imx_serial_port_resume(struct device *dev)
|
|
|
+static int imx_uart_resume(struct device *dev)
|
|
|
{
|
|
|
struct platform_device *pdev = to_platform_device(dev);
|
|
|
struct imx_port *sport = platform_get_drvdata(pdev);
|
|
|
|
|
|
/* disable wakeup from i.MX UART */
|
|
|
- serial_imx_enable_wakeup(sport, false);
|
|
|
+ imx_uart_enable_wakeup(sport, false);
|
|
|
|
|
|
- uart_resume_port(&imx_reg, &sport->port);
|
|
|
+ uart_resume_port(&imx_uart_uart_driver, &sport->port);
|
|
|
enable_irq(sport->port.irq);
|
|
|
|
|
|
clk_disable_unprepare(sport->clk_ipg);
|
|
@@ -2468,74 +2468,74 @@ static int imx_serial_port_resume(struct device *dev)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static int imx_serial_port_freeze(struct device *dev)
|
|
|
+static int imx_uart_freeze(struct device *dev)
|
|
|
{
|
|
|
struct platform_device *pdev = to_platform_device(dev);
|
|
|
struct imx_port *sport = platform_get_drvdata(pdev);
|
|
|
|
|
|
- uart_suspend_port(&imx_reg, &sport->port);
|
|
|
+ uart_suspend_port(&imx_uart_uart_driver, &sport->port);
|
|
|
|
|
|
return clk_prepare_enable(sport->clk_ipg);
|
|
|
}
|
|
|
|
|
|
-static int imx_serial_port_thaw(struct device *dev)
|
|
|
+static int imx_uart_thaw(struct device *dev)
|
|
|
{
|
|
|
struct platform_device *pdev = to_platform_device(dev);
|
|
|
struct imx_port *sport = platform_get_drvdata(pdev);
|
|
|
|
|
|
- uart_resume_port(&imx_reg, &sport->port);
|
|
|
+ uart_resume_port(&imx_uart_uart_driver, &sport->port);
|
|
|
|
|
|
clk_disable_unprepare(sport->clk_ipg);
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static const struct dev_pm_ops imx_serial_port_pm_ops = {
|
|
|
- .suspend_noirq = imx_serial_port_suspend_noirq,
|
|
|
- .resume_noirq = imx_serial_port_resume_noirq,
|
|
|
- .freeze_noirq = imx_serial_port_suspend_noirq,
|
|
|
- .restore_noirq = imx_serial_port_resume_noirq,
|
|
|
- .suspend = imx_serial_port_suspend,
|
|
|
- .resume = imx_serial_port_resume,
|
|
|
- .freeze = imx_serial_port_freeze,
|
|
|
- .thaw = imx_serial_port_thaw,
|
|
|
- .restore = imx_serial_port_thaw,
|
|
|
+static const struct dev_pm_ops imx_uart_pm_ops = {
|
|
|
+ .suspend_noirq = imx_uart_suspend_noirq,
|
|
|
+ .resume_noirq = imx_uart_resume_noirq,
|
|
|
+ .freeze_noirq = imx_uart_suspend_noirq,
|
|
|
+ .restore_noirq = imx_uart_resume_noirq,
|
|
|
+ .suspend = imx_uart_suspend,
|
|
|
+ .resume = imx_uart_resume,
|
|
|
+ .freeze = imx_uart_freeze,
|
|
|
+ .thaw = imx_uart_thaw,
|
|
|
+ .restore = imx_uart_thaw,
|
|
|
};
|
|
|
|
|
|
-static struct platform_driver serial_imx_driver = {
|
|
|
- .probe = serial_imx_probe,
|
|
|
- .remove = serial_imx_remove,
|
|
|
+static struct platform_driver imx_uart_platform_driver = {
|
|
|
+ .probe = imx_uart_probe,
|
|
|
+ .remove = imx_uart_remove,
|
|
|
|
|
|
- .id_table = imx_uart_devtype,
|
|
|
- .driver = {
|
|
|
- .name = "imx-uart",
|
|
|
+ .id_table = imx_uart_devtype,
|
|
|
+ .driver = {
|
|
|
+ .name = "imx-uart",
|
|
|
.of_match_table = imx_uart_dt_ids,
|
|
|
- .pm = &imx_serial_port_pm_ops,
|
|
|
+ .pm = &imx_uart_pm_ops,
|
|
|
},
|
|
|
};
|
|
|
|
|
|
-static int __init imx_serial_init(void)
|
|
|
+static int __init imx_uart_init(void)
|
|
|
{
|
|
|
- int ret = uart_register_driver(&imx_reg);
|
|
|
+ int ret = uart_register_driver(&imx_uart_uart_driver);
|
|
|
|
|
|
if (ret)
|
|
|
return ret;
|
|
|
|
|
|
- ret = platform_driver_register(&serial_imx_driver);
|
|
|
+ ret = platform_driver_register(&imx_uart_platform_driver);
|
|
|
if (ret != 0)
|
|
|
- uart_unregister_driver(&imx_reg);
|
|
|
+ uart_unregister_driver(&imx_uart_uart_driver);
|
|
|
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
-static void __exit imx_serial_exit(void)
|
|
|
+static void __exit imx_uart_exit(void)
|
|
|
{
|
|
|
- platform_driver_unregister(&serial_imx_driver);
|
|
|
- uart_unregister_driver(&imx_reg);
|
|
|
+ platform_driver_unregister(&imx_uart_platform_driver);
|
|
|
+ uart_unregister_driver(&imx_uart_uart_driver);
|
|
|
}
|
|
|
|
|
|
-module_init(imx_serial_init);
|
|
|
-module_exit(imx_serial_exit);
|
|
|
+module_init(imx_uart_init);
|
|
|
+module_exit(imx_uart_exit);
|
|
|
|
|
|
MODULE_AUTHOR("Sascha Hauer");
|
|
|
MODULE_DESCRIPTION("IMX generic serial port driver");
|