hc
2024-10-12 a5969cabbb4660eab42b6ef0412cbbd1200cf14d
kernel/drivers/power/supply/rk818_battery.c
....@@ -170,7 +170,7 @@
170170 struct wake_lock wake_lock;
171171 struct notifier_block fb_nb;
172172 struct timer_list caltimer;
173
- time_t rtc_base;
173
+ time64_t rtc_base;
174174 int bat_res;
175175 int chrg_status;
176176 bool is_initialized;
....@@ -262,9 +262,9 @@
262262
263263 static u64 get_boot_sec(void)
264264 {
265
- struct timespec ts;
265
+ struct timespec64 ts;
266266
267
- get_monotonic_boottime(&ts);
267
+ ktime_get_boottime_ts64(&ts);
268268
269269 return ts.tv_sec;
270270 }
....@@ -286,6 +286,9 @@
286286 {
287287 u8 i;
288288 u16 d;
289
+
290
+ if (size < 2)
291
+ return 0;
289292
290293 for (i = 0; i < size; i++) {
291294 if (value < table[i])
....@@ -1206,13 +1209,13 @@
12061209 struct rk818_battery *di;
12071210 struct fb_event *evdata = data;
12081211
1209
- if (event != FB_EARLY_EVENT_BLANK && event != FB_EVENT_BLANK)
1210
- return NOTIFY_OK;
1212
+ if (event != FB_EVENT_BLANK)
1213
+ return NOTIFY_DONE;
12111214
12121215 di = container_of(nb, struct rk818_battery, fb_nb);
12131216 di->fb_blank = *(int *)evdata->data;
12141217
1215
- return 0;
1218
+ return NOTIFY_OK;
12161219 }
12171220
12181221 static int rk818_bat_register_fb_notify(struct rk818_battery *di)
....@@ -1740,7 +1743,7 @@
17401743 di->zero_linek = 1200;
17411744 else
17421745 di->zero_linek = 800;
1743
- DBG("ZERO-new: zero_linek adjust step6...\n");
1746
+ DBG("ZERO-new: zero_linek adjust step6...\n");
17441747 }
17451748 } else {
17461749 /* xsoc < 0 */
....@@ -2101,6 +2104,8 @@
21012104 FINISH_CHRG_CUR2 : FINISH_CHRG_CUR1;
21022105 finish_sec = base2sec(di->finish_base);
21032106 soc_sec = di->fcc * 3600 / 100 / DIV(finish_current);
2107
+ if (soc_sec == 0)
2108
+ soc_sec = 1;
21042109 plus_soc = finish_sec / DIV(soc_sec);
21052110 if (finish_sec > soc_sec) {
21062111 rest = finish_sec % soc_sec;
....@@ -3127,13 +3132,11 @@
31273132 SAMPLE_RES_DIV1 : SAMPLE_RES_DIV2;
31283133 }
31293134
3130
-static time_t rk818_get_rtc_sec(void)
3135
+static time64_t rk818_get_rtc_sec(void)
31313136 {
31323137 int err;
31333138 struct rtc_time tm;
3134
- struct timespec tv = { .tv_nsec = NSEC_PER_SEC >> 1, };
31353139 struct rtc_device *rtc = rtc_class_open(CONFIG_RTC_HCTOSYS_DEVICE);
3136
- time_t sec;
31373140
31383141 err = rtc_read_time(rtc, &tm);
31393142 if (err) {
....@@ -3147,10 +3150,7 @@
31473150 return 0;
31483151 }
31493152
3150
- rtc_tm_to_time(&tm, &tv.tv_sec);
3151
- sec = tv.tv_sec;
3152
-
3153
- return sec;
3153
+ return rtc_tm_to_time64(&tm);
31543154 }
31553155
31563156 static int rk818_bat_rtc_sleep_sec(struct rk818_battery *di)
....@@ -3245,7 +3245,7 @@
32453245 }
32463246
32473247 pdata->ocv_size = length / sizeof(u32);
3248
- if (pdata->ocv_size <= 0) {
3248
+ if (pdata->ocv_size < 2) {
32493249 dev_err(dev, "invalid ocv table\n");
32503250 return -EINVAL;
32513251 }