This adds suspend/resume support for the 8250_bcm2835aux
driver to provide power management support on attached
devices.

Signed-off-by: Stefan Wahren <wahre...@gmx.net>
---

Since i don't have a RS485 setup, any test feedback would be great.

 drivers/tty/serial/8250/8250_bcm2835aux.c | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/drivers/tty/serial/8250/8250_bcm2835aux.c 
b/drivers/tty/serial/8250/8250_bcm2835aux.c
index 121a5ce86050..cccd2a09cb6f 100644
--- a/drivers/tty/serial/8250/8250_bcm2835aux.c
+++ b/drivers/tty/serial/8250/8250_bcm2835aux.c
@@ -213,11 +213,34 @@ static const struct acpi_device_id 
bcm2835aux_serial_acpi_match[] = {
 };
 MODULE_DEVICE_TABLE(acpi, bcm2835aux_serial_acpi_match);

+static int __maybe_unused bcm2835aux_suspend(struct device *dev)
+{
+       struct bcm2835aux_data *data = dev_get_drvdata(dev);
+
+       serial8250_suspend_port(data->line);
+
+       return 0;
+}
+
+static int __maybe_unused bcm2835aux_resume(struct device *dev)
+{
+       struct bcm2835aux_data *data = dev_get_drvdata(dev);
+
+       serial8250_resume_port(data->line);
+
+       return 0;
+}
+
+static const struct dev_pm_ops bcm2835aux_dev_pm_ops = {
+       SET_SYSTEM_SLEEP_PM_OPS(bcm2835aux_suspend, bcm2835aux_resume)
+};
+
 static struct platform_driver bcm2835aux_serial_driver = {
        .driver = {
                .name = "bcm2835-aux-uart",
                .of_match_table = bcm2835aux_serial_match,
                .acpi_match_table = bcm2835aux_serial_acpi_match,
+               .pm = &bcm2835aux_dev_pm_ops,
        },
        .probe  = bcm2835aux_serial_probe,
        .remove_new = bcm2835aux_serial_remove,
--
2.34.1

Reply via email to