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); |