[RK3399][Android7.1] 调试笔记 --- RTC读取时间失败

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kris_fei/article/details/84777359

Platform: RK3399
OS: Android 7.1
Kernel: v4.4.83

现象:

使用busybox hwclock -r读取rtc时间是提示:

hwclock: ioctl 0x80247009 failed: Invalid argument

kernel log提示:

[   65.931824] rtc rtc0: read_time: fail to read: -22

原因:

硬件RTC的月份时间默认是返回-1,导致rtc_valid_tm判断失败返回错误。
rtc_valid_tm():

int rtc_valid_tm(struct rtc_time *tm)
{
	if (tm->tm_year < 70
		|| ((unsigned)tm->tm_mon) >= 12
		|| tm->tm_mday < 1
		|| tm->tm_mday > rtc_month_days(tm->tm_mon, tm->tm_year + 1900)
		|| ((unsigned)tm->tm_hour) >= 24
		|| ((unsigned)tm->tm_min) >= 60
		|| ((unsigned)tm->tm_sec) >= 60)
		return -EINVAL;

	return 0;
}

解决方法:

diff --git a/drivers/rtc/rtc-rx8010.c b/drivers/rtc/rtc-rx8010.c
index b73fb92..f1b7e5d 100644
--- a/drivers/rtc/rtc-rx8010.c
+++ b/drivers/rtc/rtc-rx8010.c
@@ -139,6 +139,11 @@ static int rx8010_get_time(struct device *dev, struct rtc_time *dt)
        dt->tm_year = bcd2bin(date[RX8010_YEAR - RX8010_SEC]) + 100;
        dt->tm_wday = ffs(date[RX8010_WDAY - RX8010_SEC] & 0x7f);
 
+       //Kris, 181203, it's strange this value return -1
+       //by default,  change is as 0 to avoid error.
+       if(dt->tm_mon < 0)
+               dt->tm_mon = 0;
        return rtc_valid_tm(dt);
 }
 

猜你喜欢

转载自blog.csdn.net/kris_fei/article/details/84777359