diff --git a/src/soc/mediatek/common/include/soc/rtc_mt6359p.h b/src/soc/mediatek/common/include/soc/rtc_mt6359p.h index fcae61e914..76de250dc8 100644 --- a/src/soc/mediatek/common/include/soc/rtc_mt6359p.h +++ b/src/soc/mediatek/common/include/soc/rtc_mt6359p.h @@ -72,6 +72,10 @@ enum { RTC_TC_MTH_MASK = 0xf, }; +enum { + RTC_EOSC_CALI_TD_DEFAULT = 6U << 5, +}; + enum { RTC_K_EOSC_RSV_0 = 1 << 8, RTC_K_EOSC_RSV_1 = 1 << 9, diff --git a/src/soc/mediatek/common/rtc_mt6359p.c b/src/soc/mediatek/common/rtc_mt6359p.c index 6e8a3a0931..7ea23b0e79 100644 --- a/src/soc/mediatek/common/rtc_mt6359p.c +++ b/src/soc/mediatek/common/rtc_mt6359p.c @@ -220,6 +220,7 @@ int rtc_init(int recover) { int ret; u16 year; + u16 al_dow; rtc_info("recovery: %d\n", recover); @@ -256,6 +257,10 @@ int rtc_init(int recover) goto err; } + /* RTC EOSC calibration period setting and day-of-week value of alarm counter setting */ + rtc_read(RTC_AL_DOW, &al_dow); + rtc_write(RTC_AL_DOW, al_dow | RTC_EOSC_CALI_TD_DEFAULT); + /* solution1 for EOSC cali*/ rtc_read(RTC_AL_YEA, &year); rtc_write(RTC_AL_YEA, (year | RTC_K_EOSC_RSV_0) & (~RTC_K_EOSC_RSV_1)