tty: serial: 8250_core: allow to set ->throttle / ->unthrottle callbacks
The OMAP UART provides support for HW assisted flow control. What is missing is the support to throttle / unthrottle callbacks which are used by the omap-serial driver at the moment. This patch adds the callbacks. It should be safe to add them since they are only invoked from the serial_core (uart_throttle()) if the feature flags are set. Reviewed-by: Tony Lindgren <tony@atomide.com> Tested-by: Tony Lindgren <tony@atomide.com> Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
cc952e7017
commit
234abab143
|
@ -1319,6 +1319,16 @@ static void serial8250_start_tx(struct uart_port *port)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void serial8250_throttle(struct uart_port *port)
|
||||||
|
{
|
||||||
|
port->throttle(port);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void serial8250_unthrottle(struct uart_port *port)
|
||||||
|
{
|
||||||
|
port->unthrottle(port);
|
||||||
|
}
|
||||||
|
|
||||||
static void serial8250_stop_rx(struct uart_port *port)
|
static void serial8250_stop_rx(struct uart_port *port)
|
||||||
{
|
{
|
||||||
struct uart_8250_port *up = up_to_u8250p(port);
|
struct uart_8250_port *up = up_to_u8250p(port);
|
||||||
|
@ -2912,6 +2922,8 @@ static struct uart_ops serial8250_pops = {
|
||||||
.get_mctrl = serial8250_get_mctrl,
|
.get_mctrl = serial8250_get_mctrl,
|
||||||
.stop_tx = serial8250_stop_tx,
|
.stop_tx = serial8250_stop_tx,
|
||||||
.start_tx = serial8250_start_tx,
|
.start_tx = serial8250_start_tx,
|
||||||
|
.throttle = serial8250_throttle,
|
||||||
|
.unthrottle = serial8250_unthrottle,
|
||||||
.stop_rx = serial8250_stop_rx,
|
.stop_rx = serial8250_stop_rx,
|
||||||
.enable_ms = serial8250_enable_ms,
|
.enable_ms = serial8250_enable_ms,
|
||||||
.break_ctl = serial8250_break_ctl,
|
.break_ctl = serial8250_break_ctl,
|
||||||
|
@ -3462,6 +3474,8 @@ int serial8250_register_8250_port(struct uart_8250_port *up)
|
||||||
uart->capabilities = up->capabilities;
|
uart->capabilities = up->capabilities;
|
||||||
uart->rs485_config = up->rs485_config;
|
uart->rs485_config = up->rs485_config;
|
||||||
uart->rs485 = up->rs485;
|
uart->rs485 = up->rs485;
|
||||||
|
uart->port.throttle = up->port.throttle;
|
||||||
|
uart->port.unthrottle = up->port.unthrottle;
|
||||||
|
|
||||||
/* Take tx_loadsz from fifosize if it wasn't set separately */
|
/* Take tx_loadsz from fifosize if it wasn't set separately */
|
||||||
if (uart->port.fifosize && !uart->tx_loadsz)
|
if (uart->port.fifosize && !uart->tx_loadsz)
|
||||||
|
|
|
@ -125,6 +125,8 @@ struct uart_port {
|
||||||
struct ktermios *old);
|
struct ktermios *old);
|
||||||
int (*startup)(struct uart_port *port);
|
int (*startup)(struct uart_port *port);
|
||||||
void (*shutdown)(struct uart_port *port);
|
void (*shutdown)(struct uart_port *port);
|
||||||
|
void (*throttle)(struct uart_port *port);
|
||||||
|
void (*unthrottle)(struct uart_port *port);
|
||||||
int (*handle_irq)(struct uart_port *);
|
int (*handle_irq)(struct uart_port *);
|
||||||
void (*pm)(struct uart_port *, unsigned int state,
|
void (*pm)(struct uart_port *, unsigned int state,
|
||||||
unsigned int old);
|
unsigned int old);
|
||||||
|
|
Loading…
Reference in New Issue