From 244b2c5ca8b14627e4a17755e5922221e121c771 Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Wed, 09 Oct 2024 06:15:07 +0000
Subject: [PATCH] change system file
---
kernel/drivers/rtc/rtc-rockchip.c | 36 ++++++++++++++++++++++++++++++++----
1 files changed, 32 insertions(+), 4 deletions(-)
diff --git a/kernel/drivers/rtc/rtc-rockchip.c b/kernel/drivers/rtc/rtc-rockchip.c
index 5fa4f1a..7175ffe 100644
--- a/kernel/drivers/rtc/rtc-rockchip.c
+++ b/kernel/drivers/rtc/rtc-rockchip.c
@@ -508,7 +508,7 @@
c_mon = DIV_ROUND_CLOSEST(30 * 24 * tcamp, 32768);
if (c_hour > 1)
- rockchip_rtc_write(rtc->regmap, RTC_COMP_H, (c_hour - 1) | trim_dir);
+ rockchip_rtc_write(rtc->regmap, RTC_COMP_H, bin2bcd((c_hour - 1)) | trim_dir);
else
rockchip_rtc_write(rtc->regmap, RTC_COMP_H, CLK32K_NO_COMP);
@@ -522,7 +522,7 @@
if (c_det_day > 1)
rockchip_rtc_write(rtc->regmap, RTC_COMP_D,
- (c_det_day - 1) | trim_dir);
+ bin2bcd((c_det_day - 1)) | trim_dir);
else
rockchip_rtc_write(rtc->regmap, RTC_COMP_D, CLK32K_NO_COMP);
@@ -536,7 +536,7 @@
if (c_det_mon)
rockchip_rtc_write(rtc->regmap, RTC_COMP_M,
- (c_det_mon - 1) | trim_dir);
+ bin2bcd((c_det_mon - 1)) | trim_dir);
else
rockchip_rtc_write(rtc->regmap, RTC_COMP_M, CLK32K_NO_COMP);
@@ -555,6 +555,31 @@
return;
}
+static bool rockchip_rtc_is_trimed(struct rockchip_rtc *rtc)
+{
+ int ret, comp_done;
+
+ ret = regmap_read(rtc->regmap, RTC_CTRL, &comp_done);
+ if (ret) {
+ pr_err("%s: Failed to read RTC_CTRL: %d\n", __func__, ret);
+ return false;
+ }
+ return (comp_done & CLK32K_COMP_EN) == CLK32K_COMP_EN;
+}
+
+static void rockchip_rtc_trim_start(struct rockchip_rtc *rtc)
+{
+ if (!rockchip_rtc_is_trimed(rtc))
+ queue_delayed_work(system_long_wq, &rtc->trim_work,
+ msecs_to_jiffies(5000));
+}
+
+static void __maybe_unused rockchip_rtc_trim_close(struct rockchip_rtc *rtc)
+{
+ if (!rockchip_rtc_is_trimed(rtc))
+ cancel_delayed_work_sync(&rtc->trim_work);
+}
+
/* Enable the alarm if it should be enabled (in case it was disabled to
* prevent use as a wake source).
*/
@@ -567,6 +592,8 @@
if (device_may_wakeup(dev))
enable_irq_wake(rtc->irq);
+
+ rockchip_rtc_trim_close(rtc);
if (rtc->grf) {
switch (rtc->mode) {
@@ -610,6 +637,7 @@
dev_err(dev, "Cannot enable clock.\n");
return ret;
}
+ rockchip_rtc_trim_start(rtc);
return 0;
}
@@ -761,7 +789,7 @@
rtc->irq);
INIT_DELAYED_WORK(&rtc->trim_work, rockchip_rtc_compensation_delay_work);
- queue_delayed_work(system_long_wq, &rtc->trim_work, 3000);
+ rockchip_rtc_trim_start(rtc);
return rtc_register_device(rtc->rtc);
}
--
Gitblit v1.6.2