Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 339179
b: refs/heads/master
c: 3af08bd
h: refs/heads/master
i:
  339177: 520e990
  339175: eeb6a8f
v: v3
  • Loading branch information
Russell King committed Nov 4, 2012
1 parent 5b2753b commit f6ba871
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 9 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 2405464083e152f88bb58b7108a9e50ca362178c
refs/heads/master: 3af08bd7adb09b0806c51c06b87db08cc7075568
47 changes: 39 additions & 8 deletions trunk/drivers/tty/serial/omap-serial.c
Original file line number Diff line number Diff line change
Expand Up @@ -88,10 +88,10 @@
#define OMAP_UART_WER_MOD_WKUP 0X7F

/* Enable XON/XOFF flow control on output */
#define OMAP_UART_SW_TX 0x4
#define OMAP_UART_SW_TX 0x08

/* Enable XON/XOFF flow control on input */
#define OMAP_UART_SW_RX 0x4
#define OMAP_UART_SW_RX 0x02

#define OMAP_UART_SW_CLR 0xF0

Expand Down Expand Up @@ -354,6 +354,34 @@ static void serial_omap_start_tx(struct uart_port *port)
pm_runtime_put_autosuspend(up->dev);
}

static void serial_omap_throttle(struct uart_port *port)
{
struct uart_omap_port *up = to_uart_omap_port(port);
unsigned long flags;

pm_runtime_get_sync(up->dev);
spin_lock_irqsave(&up->port.lock, flags);
up->ier &= ~(UART_IER_RLSI | UART_IER_RDI);
serial_out(up, UART_IER, up->ier);
spin_unlock_irqrestore(&up->port.lock, flags);
pm_runtime_mark_last_busy(up->dev);
pm_runtime_put_autosuspend(up->dev);
}

static void serial_omap_unthrottle(struct uart_port *port)
{
struct uart_omap_port *up = to_uart_omap_port(port);
unsigned long flags;

pm_runtime_get_sync(up->dev);
spin_lock_irqsave(&up->port.lock, flags);
up->ier |= UART_IER_RLSI | UART_IER_RDI;
serial_out(up, UART_IER, up->ier);
spin_unlock_irqrestore(&up->port.lock, flags);
pm_runtime_mark_last_busy(up->dev);
pm_runtime_put_autosuspend(up->dev);
}

static unsigned int check_modem_status(struct uart_omap_port *up)
{
unsigned int status;
Expand Down Expand Up @@ -929,19 +957,19 @@ serial_omap_set_termios(struct uart_port *port, struct ktermios *termios,

/*
* IXON Flag:
* Enable XON/XOFF flow control on output.
* Transmit XON1, XOFF1
* Enable XON/XOFF flow control on input.
* Receiver compares XON1, XOFF1.
*/
if (termios->c_iflag & IXON)
up->efr |= OMAP_UART_SW_TX;
up->efr |= OMAP_UART_SW_RX;

/*
* IXOFF Flag:
* Enable XON/XOFF flow control on input.
* Receiver compares XON1, XOFF1.
* Enable XON/XOFF flow control on output.
* Transmit XON1, XOFF1
*/
if (termios->c_iflag & IXOFF)
up->efr |= OMAP_UART_SW_RX;
up->efr |= OMAP_UART_SW_TX;

/*
* IXANY Flag:
Expand Down Expand Up @@ -1025,6 +1053,7 @@ static void serial_omap_config_port(struct uart_port *port, int flags)
dev_dbg(up->port.dev, "serial_omap_config_port+%d\n",
up->port.line);
up->port.type = PORT_OMAP;
up->port.flags |= UPF_SOFT_FLOW | UPF_HARD_FLOW;
}

static int
Expand Down Expand Up @@ -1228,6 +1257,8 @@ static struct uart_ops serial_omap_pops = {
.get_mctrl = serial_omap_get_mctrl,
.stop_tx = serial_omap_stop_tx,
.start_tx = serial_omap_start_tx,
.throttle = serial_omap_throttle,
.unthrottle = serial_omap_unthrottle,
.stop_rx = serial_omap_stop_rx,
.enable_ms = serial_omap_enable_ms,
.break_ctl = serial_omap_break_ctl,
Expand Down

0 comments on commit f6ba871

Please sign in to comment.