[PATCH] rtc: ds1307: implement suspend/resume function

From: Alifer Moraes
Date: Mon Mar 07 2022 - 09:18:07 EST


From: Felix Radensky <felix.r@xxxxxxxxxxxxx>

Implement the suspend/resume function in rtc-ds1307's driver
to control irq_wake flag and handle as wakeup source.

Signed-off-by: Felix Radensky <felix.r@xxxxxxxxxxxxx>
Signed-off-by: Alifer Moraes <alifer.m@xxxxxxxxxxxxx>
---
drivers/rtc/rtc-ds1307.c | 27 +++++++++++++++++++++++++++
1 file changed, 27 insertions(+)

diff --git a/drivers/rtc/rtc-ds1307.c b/drivers/rtc/rtc-ds1307.c
index 336cb9aa5e33..fab6e2ba345c 100644
--- a/drivers/rtc/rtc-ds1307.c
+++ b/drivers/rtc/rtc-ds1307.c
@@ -2006,9 +2006,36 @@ static int ds1307_probe(struct i2c_client *client,
return err;
}

+#ifdef CONFIG_PM_SLEEP
+static int ds1307_suspend(struct device *dev)
+{
+ struct i2c_client *client = to_i2c_client(dev);
+
+ if (client->irq && device_may_wakeup(dev))
+ return enable_irq_wake(client->irq);
+
+ return 0;
+}
+
+static int ds1307_resume(struct device *dev)
+{
+ struct i2c_client *client = to_i2c_client(dev);
+
+ if (client->irq && device_may_wakeup(dev))
+ return disable_irq_wake(client->irq);
+
+ return 0;
+}
+
+static SIMPLE_DEV_PM_OPS(ds1307_pm_ops, ds1307_suspend, ds1307_resume);
+#endif
+
static struct i2c_driver ds1307_driver = {
.driver = {
.name = "rtc-ds1307",
+#ifdef CONFIG_PM_SLEEP
+ .pm = &ds1307_pm_ops,
+#endif
.of_match_table = ds1307_of_match,
},
.probe = ds1307_probe,
--
2.25.1