ARM: OMAP2+: UART: Add wakeup mechanism for omap-uarts
[firefly-linux-kernel-4.4.55.git] / drivers / tty / serial / omap-serial.c
index 764ac779569486ba6707b1b0a93b64d58a3634e1..45a25a01c44d619ab4fb0e58304aebda8c95a565 100644 (file)
@@ -1496,9 +1496,24 @@ static int serial_omap_runtime_suspend(struct device *dev)
        if (!up)
                return -EINVAL;
 
+       if (!pdata->enable_wakeup)
+               return 0;
+
        if (pdata->get_context_loss_count)
                up->context_loss_cnt = pdata->get_context_loss_count(dev);
 
+       if (device_may_wakeup(dev)) {
+               if (!up->wakeups_enabled) {
+                       pdata->enable_wakeup(up->pdev, true);
+                       up->wakeups_enabled = true;
+               }
+       } else {
+               if (up->wakeups_enabled) {
+                       pdata->enable_wakeup(up->pdev, false);
+                       up->wakeups_enabled = false;
+               }
+       }
+
        /* Errata i291 */
        if (up->use_dma && pdata->set_forceidle &&
                        (up->errata & UART_ERRATA_i291_DMA_FORCEIDLE))