70 lines
2.0 KiB
Diff
70 lines
2.0 KiB
Diff
|
From 54eca2fa13a00f4cde812b5231fb9058ef0aae87 Mon Sep 17 00:00:00 2001
|
||
|
From: Samuel Holland <samuel@sholland.org>
|
||
|
Date: Sat, 2 Jan 2021 15:52:27 -0600
|
||
|
Subject: [PATCH 163/391] rtc: sun6i: Allow RTC wakeup after shutdown
|
||
|
|
||
|
Only IRQs that have enable_irq_wake() called on them can wake the system
|
||
|
from sleep or after it has been shut down. Currently, the RTC alarm can
|
||
|
only wake the system from sleep. Run the suspend callback to arm the IRQ
|
||
|
during the shutdown process, so the RTC alarm also works after shutdown.
|
||
|
|
||
|
Signed-off-by: Samuel Holland <samuel@sholland.org>
|
||
|
---
|
||
|
drivers/rtc/rtc-sun6i.c | 12 +++++++++++-
|
||
|
1 file changed, 11 insertions(+), 1 deletion(-)
|
||
|
|
||
|
diff --git a/drivers/rtc/rtc-sun6i.c b/drivers/rtc/rtc-sun6i.c
|
||
|
index ed5516089..16428e284 100644
|
||
|
--- a/drivers/rtc/rtc-sun6i.c
|
||
|
+++ b/drivers/rtc/rtc-sun6i.c
|
||
|
@@ -717,6 +717,7 @@ static struct nvmem_config sun6i_rtc_nvmem_cfg = {
|
||
|
};
|
||
|
|
||
|
#ifdef CONFIG_PM_SLEEP
|
||
|
+
|
||
|
/* Enable IRQ wake on suspend, to wake up from RTC. */
|
||
|
static int sun6i_rtc_suspend(struct device *dev)
|
||
|
{
|
||
|
@@ -729,7 +730,7 @@ static int sun6i_rtc_suspend(struct device *dev)
|
||
|
}
|
||
|
|
||
|
/* Disable IRQ wake on resume. */
|
||
|
-static int sun6i_rtc_resume(struct device *dev)
|
||
|
+static int __maybe_unused sun6i_rtc_resume(struct device *dev)
|
||
|
{
|
||
|
struct sun6i_rtc_dev *chip = dev_get_drvdata(dev);
|
||
|
|
||
|
@@ -738,6 +739,7 @@ static int sun6i_rtc_resume(struct device *dev)
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
+
|
||
|
#endif
|
||
|
|
||
|
static SIMPLE_DEV_PM_OPS(sun6i_rtc_pm_ops,
|
||
|
@@ -859,6 +861,13 @@ static int sun6i_rtc_probe(struct platform_device *pdev)
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
+static void sun6i_rtc_shutdown(struct platform_device *pdev)
|
||
|
+{
|
||
|
+#ifdef CONFIG_PM_SLEEP
|
||
|
+ sun6i_rtc_suspend(&pdev->dev);
|
||
|
+#endif
|
||
|
+}
|
||
|
+
|
||
|
/*
|
||
|
* As far as RTC functionality goes, all models are the same. The
|
||
|
* datasheets claim that different models have different number of
|
||
|
@@ -883,6 +892,7 @@ MODULE_DEVICE_TABLE(of, sun6i_rtc_dt_ids);
|
||
|
|
||
|
static struct platform_driver sun6i_rtc_driver = {
|
||
|
.probe = sun6i_rtc_probe,
|
||
|
+ .shutdown = sun6i_rtc_shutdown,
|
||
|
.driver = {
|
||
|
.name = "sun6i-rtc",
|
||
|
.of_match_table = sun6i_rtc_dt_ids,
|
||
|
--
|
||
|
2.35.3
|
||
|
|