From 2f7c68cb55ecb7331f2381deb497c27155f32faf Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Wed, 03 Jan 2024 09:43:39 +0000
Subject: [PATCH] update kernel to 5.10.198

---
 kernel/drivers/rtc/rtc-rockchip.c |   30 +++++++++++++++++++++++++++++-
 1 files changed, 29 insertions(+), 1 deletions(-)

diff --git a/kernel/drivers/rtc/rtc-rockchip.c b/kernel/drivers/rtc/rtc-rockchip.c
index 8dd82ef..7175ffe 100644
--- a/kernel/drivers/rtc/rtc-rockchip.c
+++ b/kernel/drivers/rtc/rtc-rockchip.c
@@ -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