summaryrefslogtreecommitdiff
path: root/drivers/tty/serial/omap-serial.c
diff options
context:
space:
mode:
authormattis fjallstrom <mattis@acm.org>2015-07-02 01:19:37 -0700
committermattis fjallstrom <mattis@acm.org>2015-07-02 01:40:14 -0700
commitb40c8de18d0f070cb1182f18d643bb6c8917be0e (patch)
treed8390ee12e475b26363a425e47bde005e541cfe6 /drivers/tty/serial/omap-serial.c
parenta935b06ef32a95efb0d5ddb80d8e69cdefa575dd (diff)
parent69a77a4d2e92d81f45249f09126bd5d2c36a0b5d (diff)
downloadolio-linux-3.10-b40c8de18d0f070cb1182f18d643bb6c8917be0e.tar.xz
olio-linux-3.10-b40c8de18d0f070cb1182f18d643bb6c8917be0e.zip
Moved from Invensense accelerometer to ST.
Change-Id: If42c1a612784368bea2f77d2ef8722a31f9a4f34
Diffstat (limited to 'drivers/tty/serial/omap-serial.c')
-rw-r--r--drivers/tty/serial/omap-serial.c41
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);