hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/power/supply/rk817_battery.c
....@@ -560,7 +560,7 @@
560560 int zero_batocv_to_cap;
561561 int zero_xsoc;
562562 unsigned long finish_base;
563
- time_t rtc_base;
563
+ time64_t rtc_base;
564564 int sm_remain_cap;
565565 int sm_linek;
566566 int sm_chrg_dsoc;
....@@ -631,9 +631,9 @@
631631
632632 static u64 get_boot_sec(void)
633633 {
634
- struct timespec ts;
634
+ struct timespec64 ts;
635635
636
- get_monotonic_boottime(&ts);
636
+ ktime_get_boottime_ts64(&ts);
637637
638638 return ts.tv_sec;
639639 }
....@@ -650,6 +650,9 @@
650650 {
651651 u8 i;
652652 u16 d;
653
+
654
+ if (size < 2)
655
+ return 0;
653656
654657 for (i = 0; i < size; i++) {
655658 if (value < table[i])
....@@ -710,14 +713,6 @@
710713 unsigned int val)
711714 {
712715 return regmap_field_write(battery->rmap_fields[field_id], val);
713
-}
714
-
715
-static bool rk817_is_bat_exist(struct rk817_battery_device *battery)
716
-{
717
- if (battery->chip_id == RK817_ID)
718
- return rk817_bat_field_read(battery, BAT_EXS) ? true : false;
719
-
720
- return true;
721716 }
722717
723718 /*cal_offset: current offset value*/
....@@ -1186,7 +1181,7 @@
11861181 buf = (cap >> 0) & 0xff;
11871182 rk817_bat_field_write(battery, Q_INIT_L0, buf);
11881183
1189
- battery->rsoc = capacity * 1000 * 100 / battery->fcc;
1184
+ battery->rsoc = capacity * 1000 * 100 / DIV(battery->fcc);
11901185 battery->remain_cap = capacity * 1000;
11911186 DBG("new remaincap: %d\n", battery->remain_cap);
11921187 fuel_gauge_q_init_info(battery);
....@@ -1607,6 +1602,9 @@
16071602 battery->pwron_voltage) * 1000;/* uAH */
16081603 battery->dsoc = battery->rsoc;
16091604 battery->fcc = battery->pdata->design_capacity;
1605
+ if (battery->fcc < MIN_FCC)
1606
+ battery->fcc = MIN_FCC;
1607
+
16101608 battery->nac = rk817_bat_vol_to_cap(battery, battery->pwron_voltage);
16111609
16121610 rk817_bat_update_qmax(battery, battery->qmax);
....@@ -1809,7 +1807,7 @@
18091807 }
18101808
18111809 pdata->ocv_size = length / sizeof(u32);
1812
- if (pdata->ocv_size <= 0) {
1810
+ if (pdata->ocv_size < 2) {
18131811 dev_err(dev, "invalid ocv table\n");
18141812 return -EINVAL;
18151813 }
....@@ -1874,8 +1872,6 @@
18741872 ret = of_property_read_u32(np, "virtual_power", &pdata->bat_mode);
18751873 if (ret < 0)
18761874 dev_err(dev, "virtual_power missing!\n");
1877
- if (!rk817_is_bat_exist(battery))
1878
- battery->pdata->bat_mode = MODE_VIRTUAL;
18791875
18801876 ret = of_property_read_u32(np, "bat_res", &pdata->bat_res);
18811877 if (ret < 0)
....@@ -2783,6 +2779,8 @@
27832779 finish_sec = base2sec(battery->finish_base);
27842780
27852781 soc_sec = battery->fcc * 3600 / 100 / DIV(finish_current);
2782
+ if (soc_sec == 0)
2783
+ soc_sec = 1;
27862784 plus_soc = finish_sec / DIV(soc_sec);
27872785 if (finish_sec > soc_sec) {
27882786 rest = finish_sec % soc_sec;
....@@ -3089,13 +3087,11 @@
30893087 {
30903088 }
30913089
3092
-static time_t rk817_get_rtc_sec(void)
3090
+static time64_t rk817_get_rtc_sec(void)
30933091 {
30943092 int err;
30953093 struct rtc_time tm;
3096
- struct timespec tv = { .tv_nsec = NSEC_PER_SEC >> 1, };
30973094 struct rtc_device *rtc = rtc_class_open(CONFIG_RTC_HCTOSYS_DEVICE);
3098
- time_t sec;
30993095
31003096 err = rtc_read_time(rtc, &tm);
31013097 if (err) {
....@@ -3109,10 +3105,7 @@
31093105 return 0;
31103106 }
31113107
3112
- rtc_tm_to_time(&tm, &tv.tv_sec);
3113
- sec = tv.tv_sec;
3114
-
3115
- return sec;
3108
+ return rtc_tm_to_time64(&tm);
31163109 }
31173110
31183111 #ifdef CONFIG_PM_SLEEP