summaryrefslogtreecommitdiff
path: root/drivers/tty/serial/omap-serial.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/tty/serial/omap-serial.c')
-rw-r--r--drivers/tty/serial/omap-serial.c26
1 files changed, 23 insertions, 3 deletions
diff --git a/drivers/tty/serial/omap-serial.c b/drivers/tty/serial/omap-serial.c
index 037e46bd92a..625cf102cc3 100644
--- a/drivers/tty/serial/omap-serial.c
+++ b/drivers/tty/serial/omap-serial.c
@@ -226,6 +226,28 @@ void omap_serial_runtime_put(int port_index)
spin_unlock(&up->port.lock);
}
+static void _omap_serial_wakeup_event(struct uart_omap_port *up)
+{
+ if (up->wakelock_timeout)
+ pm_wakeup_event(up->dev, up->wakelock_timeout);
+}
+
+static void _omap_serial_relax(struct uart_omap_port *up)
+{
+ if (up->wakelock_timeout)
+ pm_relax(up->dev);
+}
+
+void omap_serial_relax(int port_index)
+{
+ struct uart_omap_port *up;
+
+ if (port_index >= OMAP_MAX_HSUART_PORTS)
+ return;
+ up = ui[port_index];
+ _omap_serial_relax(up);
+}
+
static inline unsigned int serial_in(struct uart_omap_port *up, int offset)
{
offset <<= up->port.regshift;
@@ -546,9 +568,7 @@ static irqreturn_t serial_omap_irq(int irq, void *dev_id)
spin_lock(&up->port.lock);
pm_runtime_get_sync(up->dev);
-
- if (up->wakelock_timeout)
- pm_wakeup_event(up->dev, up->wakelock_timeout);
+ _omap_serial_wakeup_event(up);
do {
iir = serial_in(up, UART_IIR);