页次: 1
12小时快了9秒,周末的时候放这里两天也快了16秒,怎么还不是均匀的快?论坛中有个人也有这个问题,但他最终没写解决办法,你们有谁遇到过怎么解决的?
我现在是3.4的kernel,由于产品做出去了货才发现有这个问题,需要尽量不要改硬件,或者少改软件。
105 void sunxi_rtc_fixup(unsigned long *org_time, unsigned long *time)
- 106 {
| 107 unsigned long delta;
| 108 unsigned long t1, t2;
| 109 bool out;
| 110
| 111 if (!time)
| 112 return;
| 113
|- 114 if (!org_time) {
|| 115 t1 = (unsigned long long)sunxi_rtc_read(SUNXI_GPDATA_REG(6)) << 32;
|| 116 t1 |= (unsigned long)sunxi_rtc_read(SUNXI_GPDATA_REG(7));
|| 117 } else
| 118 t1 = *org_time;
| 119
| 120 t2 = *time;
| 121
| 122 out = sunxi_rtc_read(SUNXI_LOSC_CTRL_REG) & RTC_SOURCE_EXTERNAL;
| 123
| 124 delta = (t2 > t1) ? (t2 - t1) : (t1 - t2);
| 125 delta = (delta * (OSC_ORG - OSC_32K)) / OSC_ORG;
| 126
| 129 if (out)
| 130 *time -= delta;
| 131 else
| 132 *time += delta;
| 133 }
另外他这个驱动这里的换算也有问题啊, delta = (delta * (OSC_ORG - OSC_32K)) / OSC_ORG;这里的乘法会导致溢出啊。最开始我们客户发现的时候就是快了1天多,就是这么来的。但现在是几个小时内也会有秒级的快。这是怎么回事啊?
页次: 1