diff options
Diffstat (limited to 'drivers/tty/serial/omap-serial.c')
| -rw-r--r-- | drivers/tty/serial/omap-serial.c | 41 | 
1 files changed, 41 insertions, 0 deletions
diff --git a/drivers/tty/serial/omap-serial.c b/drivers/tty/serial/omap-serial.c index 3009a8909cc..9b19ae172c3 100644 --- a/drivers/tty/serial/omap-serial.c +++ b/drivers/tty/serial/omap-serial.c @@ -1109,7 +1109,14 @@ serial_omap_pm(struct uart_port *port, unsigned int state,  	pm_runtime_mark_last_busy(up->dev);  	pm_runtime_put_autosuspend(up->dev);  } +static void serial_omap_wake_peer(struct uart_port *port) +{ +       struct uart_omap_port *up = to_uart_omap_port(port); +       struct omap_uart_port_info *pdata = up->dev->platform_data; +       if (pdata->wake_peer) +               pdata->wake_peer(port); +}  static void serial_omap_release_port(struct uart_port *port)  {  	dev_dbg(port->dev, "serial_omap_release_port+\n"); @@ -1341,6 +1348,7 @@ static struct uart_ops serial_omap_pops = {  	.shutdown	= serial_omap_shutdown,  	.set_termios	= serial_omap_set_termios,  	.pm		= serial_omap_pm, +	.wake_peer 	= serial_omap_wake_peer,  	.type		= serial_omap_type,  	.release_port	= serial_omap_release_port,  	.request_port	= serial_omap_request_port, @@ -1860,6 +1868,39 @@ static void __exit serial_omap_exit(void)  	uart_unregister_driver(&serial_omap_reg);  } +/* Used by ext client device connected to uart to control uart */ +int omap_serial_ext_uart_enable(u8 port_id) +{ +       struct uart_omap_port *up; +       int err = 0; + +       if (port_id > OMAP_MAX_HSUART_PORTS) { +               pr_err("Invalid Port_id %d passed to %s\n", port_id, __func__); +               err = -ENODEV; +       } else { +               up = ui[port_id]; +               pm_runtime_get_sync(up->dev); +       } +       return err; +} + +int omap_serial_ext_uart_disable(u8 port_id) +{ +       struct uart_omap_port *up; +       int err = 0; + +       if (port_id > OMAP_MAX_HSUART_PORTS) { +               pr_err("Invalid Port_id %d passed to %s\n", port_id, __func__); +               err = -ENODEV; +       } else { +               up = ui[port_id]; +               pm_runtime_mark_last_busy(up->dev); +               pm_runtime_put_autosuspend(up->dev); +       } +       return err; +} + +  module_init(serial_omap_init);  module_exit(serial_omap_exit);  |