问题描述
开机设置正确时间后,重启机器,时间仍为RTC中原始值,也就是说正确的时间并没有设置到RTC中,而RTC一直走着一个错误的时间,并在开机时显示
分析过程:
- 通过查看日志发现在系统时间更改后,pcf8563_set_datetime并未执行,也就是说正确的时间并没有写入到RTC中,再往前跟发现alarm_set_rtc中alarmtimer_get_rtcdev出了问题。即没有获取到设备,而设备就是rtcdev这个全局变量。
- android系统设置时间时,会调用 到kernel中的drivers/staging/android/alarm-dev.c
|
|
- 然后祭出我们的度娘大法,找到了http://bbs.csdn.net/topics/391882411 这个帖子,帖子里已经说的很清楚了。
根本原因:
- 根据帖子描述,rtc注册到alarmtimer_rtc_add_device这一步时有两个判断条件:
|
|
首先,pcf8563驱动中没有实现set_alarm,所以此处直接返回。
其次,实现了set_alarm后,第二条仍然不能通过。
所以,rtc设备并没有赋值给rtcdev,设置时间时当然也就获取不到了。
解决办法:
实现set_alarm函数,此项目并不需要alarm功能,随便写个空函数即可。
在pcf8563_probe中添加device_init_wakeup(&client->dev, true);
- device_init_wakeup是设置该设备能不能唤醒设备,我们这里设为true。
|
|