hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/drivers/rtc/rtc-rockchip.c
....@@ -555,6 +555,31 @@
555555 return;
556556 }
557557
558
+static bool rockchip_rtc_is_trimed(struct rockchip_rtc *rtc)
559
+{
560
+ int ret, comp_done;
561
+
562
+ ret = regmap_read(rtc->regmap, RTC_CTRL, &comp_done);
563
+ if (ret) {
564
+ pr_err("%s: Failed to read RTC_CTRL: %d\n", __func__, ret);
565
+ return false;
566
+ }
567
+ return (comp_done & CLK32K_COMP_EN) == CLK32K_COMP_EN;
568
+}
569
+
570
+static void rockchip_rtc_trim_start(struct rockchip_rtc *rtc)
571
+{
572
+ if (!rockchip_rtc_is_trimed(rtc))
573
+ queue_delayed_work(system_long_wq, &rtc->trim_work,
574
+ msecs_to_jiffies(5000));
575
+}
576
+
577
+static void __maybe_unused rockchip_rtc_trim_close(struct rockchip_rtc *rtc)
578
+{
579
+ if (!rockchip_rtc_is_trimed(rtc))
580
+ cancel_delayed_work_sync(&rtc->trim_work);
581
+}
582
+
558583 /* Enable the alarm if it should be enabled (in case it was disabled to
559584 * prevent use as a wake source).
560585 */
....@@ -567,6 +592,8 @@
567592
568593 if (device_may_wakeup(dev))
569594 enable_irq_wake(rtc->irq);
595
+
596
+ rockchip_rtc_trim_close(rtc);
570597
571598 if (rtc->grf) {
572599 switch (rtc->mode) {
....@@ -610,6 +637,7 @@
610637 dev_err(dev, "Cannot enable clock.\n");
611638 return ret;
612639 }
640
+ rockchip_rtc_trim_start(rtc);
613641
614642 return 0;
615643 }
....@@ -761,7 +789,7 @@
761789 rtc->irq);
762790
763791 INIT_DELAYED_WORK(&rtc->trim_work, rockchip_rtc_compensation_delay_work);
764
- queue_delayed_work(system_long_wq, &rtc->trim_work, 3000);
792
+ rockchip_rtc_trim_start(rtc);
765793
766794 return rtc_register_device(rtc->rtc);
767795 }