Commit 144ef5c2 authored by Wan Ahmad Zainie's avatar Wan Ahmad Zainie Committed by Greg Kroah-Hartman

serial: 8250: export get_mctrl function

Exposes get_mctrl() function so that it can be overriden with platform
specific implementation.
Signed-off-by: default avatarWan Ahmad Zainie <wan.ahmad.zainie.wan.mohamad@intel.com>
Reviewed-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: default avatarHeikki Krogerus <heikki.krogerus@linux.intel.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent eeeabba0
...@@ -830,6 +830,7 @@ static int serial8250_probe(struct platform_device *dev) ...@@ -830,6 +830,7 @@ static int serial8250_probe(struct platform_device *dev)
uart.port.handle_irq = p->handle_irq; uart.port.handle_irq = p->handle_irq;
uart.port.handle_break = p->handle_break; uart.port.handle_break = p->handle_break;
uart.port.set_termios = p->set_termios; uart.port.set_termios = p->set_termios;
uart.port.get_mctrl = p->get_mctrl;
uart.port.pm = p->pm; uart.port.pm = p->pm;
uart.port.dev = &dev->dev; uart.port.dev = &dev->dev;
uart.port.irqflags |= irqflag; uart.port.irqflags |= irqflag;
...@@ -1022,6 +1023,8 @@ int serial8250_register_8250_port(struct uart_8250_port *up) ...@@ -1022,6 +1023,8 @@ int serial8250_register_8250_port(struct uart_8250_port *up)
/* Possibly override set_termios call */ /* Possibly override set_termios call */
if (up->port.set_termios) if (up->port.set_termios)
uart->port.set_termios = up->port.set_termios; uart->port.set_termios = up->port.set_termios;
if (up->port.get_mctrl)
uart->port.get_mctrl = up->port.get_mctrl;
if (up->port.set_mctrl) if (up->port.set_mctrl)
uart->port.set_mctrl = up->port.set_mctrl; uart->port.set_mctrl = up->port.set_mctrl;
if (up->port.startup) if (up->port.startup)
......
...@@ -1882,7 +1882,7 @@ static unsigned int serial8250_tx_empty(struct uart_port *port) ...@@ -1882,7 +1882,7 @@ static unsigned int serial8250_tx_empty(struct uart_port *port)
return (lsr & BOTH_EMPTY) == BOTH_EMPTY ? TIOCSER_TEMT : 0; return (lsr & BOTH_EMPTY) == BOTH_EMPTY ? TIOCSER_TEMT : 0;
} }
static unsigned int serial8250_get_mctrl(struct uart_port *port) unsigned int serial8250_do_get_mctrl(struct uart_port *port)
{ {
struct uart_8250_port *up = up_to_u8250p(port); struct uart_8250_port *up = up_to_u8250p(port);
unsigned int status; unsigned int status;
...@@ -1903,6 +1903,14 @@ static unsigned int serial8250_get_mctrl(struct uart_port *port) ...@@ -1903,6 +1903,14 @@ static unsigned int serial8250_get_mctrl(struct uart_port *port)
ret |= TIOCM_CTS; ret |= TIOCM_CTS;
return ret; return ret;
} }
EXPORT_SYMBOL_GPL(serial8250_do_get_mctrl);
static unsigned int serial8250_get_mctrl(struct uart_port *port)
{
if (port->get_mctrl)
return port->get_mctrl(port);
return serial8250_do_get_mctrl(port);
}
void serial8250_do_set_mctrl(struct uart_port *port, unsigned int mctrl) void serial8250_do_set_mctrl(struct uart_port *port, unsigned int mctrl)
{ {
......
...@@ -36,6 +36,7 @@ struct plat_serial8250_port { ...@@ -36,6 +36,7 @@ struct plat_serial8250_port {
void (*set_termios)(struct uart_port *, void (*set_termios)(struct uart_port *,
struct ktermios *new, struct ktermios *new,
struct ktermios *old); struct ktermios *old);
unsigned int (*get_mctrl)(struct uart_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 old); unsigned old);
...@@ -148,6 +149,7 @@ extern int early_serial8250_setup(struct earlycon_device *device, ...@@ -148,6 +149,7 @@ extern int early_serial8250_setup(struct earlycon_device *device,
const char *options); const char *options);
extern void serial8250_do_set_termios(struct uart_port *port, extern void serial8250_do_set_termios(struct uart_port *port,
struct ktermios *termios, struct ktermios *old); struct ktermios *termios, struct ktermios *old);
extern unsigned int serial8250_do_get_mctrl(struct uart_port *port);
extern int serial8250_do_startup(struct uart_port *port); extern int serial8250_do_startup(struct uart_port *port);
extern void serial8250_do_shutdown(struct uart_port *port); extern void serial8250_do_shutdown(struct uart_port *port);
extern void serial8250_do_pm(struct uart_port *port, unsigned int state, extern void serial8250_do_pm(struct uart_port *port, unsigned int state,
......
...@@ -123,6 +123,7 @@ struct uart_port { ...@@ -123,6 +123,7 @@ struct uart_port {
void (*set_termios)(struct uart_port *, void (*set_termios)(struct uart_port *,
struct ktermios *new, struct ktermios *new,
struct ktermios *old); struct ktermios *old);
unsigned int (*get_mctrl)(struct uart_port *);
void (*set_mctrl)(struct uart_port *, unsigned int); void (*set_mctrl)(struct uart_port *, unsigned int);
int (*startup)(struct uart_port *port); int (*startup)(struct uart_port *port);
void (*shutdown)(struct uart_port *port); void (*shutdown)(struct uart_port *port);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment