Skip to content

Commit

Permalink
serial: bfin_uart: RTS and CTS MMRs can be either 16-bit width or 32-…
Browse files Browse the repository at this point in the history
…bit width.

Change hardware flow control code to adapt to both bf5xx and bf60x.
Disabled serial device before set termios for bf60x.

Signed-off-by: Sonic Zhang <[email protected]>
Signed-off-by: Bob Liu <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
  • Loading branch information
sonicz authored and gregkh committed May 17, 2012
1 parent 239c25b commit 3c2d0ed
Showing 1 changed file with 10 additions and 12 deletions.
22 changes: 10 additions & 12 deletions drivers/tty/serial/bfin_uart.c
Original file line number Diff line number Diff line change
Expand Up @@ -549,7 +549,7 @@ static irqreturn_t bfin_serial_dma_tx_int(int irq, void *dev_id)
static irqreturn_t bfin_serial_dma_rx_int(int irq, void *dev_id)
{
struct bfin_serial_port *uart = dev_id;
unsigned short irqstat;
unsigned int irqstat;
int x_pos, pos;

spin_lock(&uart->rx_lock);
Expand Down Expand Up @@ -582,7 +582,7 @@ static irqreturn_t bfin_serial_dma_rx_int(int irq, void *dev_id)
static unsigned int bfin_serial_tx_empty(struct uart_port *port)
{
struct bfin_serial_port *uart = (struct bfin_serial_port *)port;
unsigned short lsr;
unsigned int lsr;

lsr = UART_GET_LSR(uart);
if (lsr & TEMT)
Expand Down Expand Up @@ -741,7 +741,7 @@ static int bfin_serial_startup(struct uart_port *port)
}

/* CTS RTS PINs are negative assertive. */
UART_PUT_MCR(uart, ACTS);
UART_PUT_MCR(uart, UART_GET_MCR(uart) | ACTS);
UART_SET_IER(uart, EDSSI);
}
#endif
Expand Down Expand Up @@ -799,7 +799,7 @@ bfin_serial_set_termios(struct uart_port *port, struct ktermios *termios,
struct bfin_serial_port *uart = (struct bfin_serial_port *)port;
unsigned long flags;
unsigned int baud, quot;
unsigned short val, ier, lcr = 0;
unsigned int ier, lcr = 0;

switch (termios->c_cflag & CSIZE) {
case CS8:
Expand Down Expand Up @@ -871,6 +871,7 @@ bfin_serial_set_termios(struct uart_port *port, struct ktermios *termios,

/* Disable UART */
ier = UART_GET_IER(uart);
UART_PUT_GCTL(uart, UART_GET_GCTL(uart) & ~UCEN);
UART_DISABLE_INTS(uart);

/* Set DLAB in LCR to Access CLK */
Expand All @@ -882,14 +883,11 @@ bfin_serial_set_termios(struct uart_port *port, struct ktermios *termios,
/* Clear DLAB in LCR to Access THR RBR IER */
UART_CLEAR_DLAB(uart);

UART_PUT_LCR(uart, lcr);
UART_PUT_LCR(uart, (UART_GET_LCR(uart) & ~LCR_MASK) | lcr);

/* Enable UART */
UART_ENABLE_INTS(uart, ier);

val = UART_GET_GCTL(uart);
val |= UCEN;
UART_PUT_GCTL(uart, val);
UART_PUT_GCTL(uart, UART_GET_GCTL(uart) | UCEN);

/* Port speed changed, update the per-port timeout. */
uart_update_timeout(port, termios->c_cflag, baud);
Expand Down Expand Up @@ -949,7 +947,7 @@ bfin_serial_verify_port(struct uart_port *port, struct serial_struct *ser)
static void bfin_serial_set_ldisc(struct uart_port *port, int ld)
{
struct bfin_serial_port *uart = (struct bfin_serial_port *)port;
unsigned short val;
unsigned int val;

switch (ld) {
case N_IRDA:
Expand All @@ -967,7 +965,7 @@ static void bfin_serial_set_ldisc(struct uart_port *port, int ld)
static void bfin_serial_reset_irda(struct uart_port *port)
{
struct bfin_serial_port *uart = (struct bfin_serial_port *)port;
unsigned short val;
unsigned int val;

val = UART_GET_GCTL(uart);
val &= ~(UMOD_MASK | RPOLC);
Expand Down Expand Up @@ -1065,7 +1063,7 @@ static void __init
bfin_serial_console_get_options(struct bfin_serial_port *uart, int *baud,
int *parity, int *bits)
{
unsigned short status;
unsigned int status;

status = UART_GET_IER(uart) & (ERBFI | ETBEI);
if (status == (ERBFI | ETBEI)) {
Expand Down

0 comments on commit 3c2d0ed

Please sign in to comment.