tty: serial: msm_serial: Add support for suspend/resume
authorPascal Huerst <pascal.huerst@gmail.com>
Wed, 11 Apr 2018 11:50:45 +0000 (13:50 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 22 Apr 2018 15:32:43 +0000 (17:32 +0200)
Without this, tx stops working after resume. By adding
these calls, everything seems to work fine.

Signed-off-by: Pascal Huerst <pascal.huerst@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/msm_serial.c

index ee96cf0..33cd6e5 100644 (file)
@@ -1812,11 +1812,36 @@ static const struct of_device_id msm_match_table[] = {
 };
 MODULE_DEVICE_TABLE(of, msm_match_table);
 
+#ifdef CONFIG_PM_SLEEP
+static int msm_serial_suspend(struct device *dev)
+{
+       struct msm_port *port = dev_get_drvdata(dev);
+
+       uart_suspend_port(&msm_uart_driver, &port->uart);
+
+       return 0;
+}
+
+static int msm_serial_resume(struct device *dev)
+{
+       struct msm_port *port = dev_get_drvdata(dev);
+
+       uart_resume_port(&msm_uart_driver, &port->uart);
+
+       return 0;
+}
+#endif /* CONFIG_PM_SLEEP */
+
+static const struct dev_pm_ops msm_serial_dev_pm_ops = {
+       SET_SYSTEM_SLEEP_PM_OPS(msm_serial_suspend, msm_serial_resume)
+};
+
 static struct platform_driver msm_platform_driver = {
        .remove = msm_serial_remove,
        .probe = msm_serial_probe,
        .driver = {
                .name = "msm_serial",
+               .pm = &msm_serial_dev_pm_ops,
                .of_match_table = msm_match_table,
        },
 };