From 61598093bbdd283a7edc367d900f223070ead8d2 Mon Sep 17 00:00:00 2001 From: hc <hc@nodka.com> Date: Fri, 10 May 2024 07:43:03 +0000 Subject: [PATCH] add ax88772C AX88772C_eeprom_tools --- 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