hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/power/supply/rk817_battery.c
....@@ -651,6 +651,9 @@
651651 u8 i;
652652 u16 d;
653653
654
+ if (size < 2)
655
+ return 0;
656
+
654657 for (i = 0; i < size; i++) {
655658 if (value < table[i])
656659 break;
....@@ -1599,6 +1602,9 @@
15991602 battery->pwron_voltage) * 1000;/* uAH */
16001603 battery->dsoc = battery->rsoc;
16011604 battery->fcc = battery->pdata->design_capacity;
1605
+ if (battery->fcc < MIN_FCC)
1606
+ battery->fcc = MIN_FCC;
1607
+
16021608 battery->nac = rk817_bat_vol_to_cap(battery, battery->pwron_voltage);
16031609
16041610 rk817_bat_update_qmax(battery, battery->qmax);
....@@ -1801,7 +1807,7 @@
18011807 }
18021808
18031809 pdata->ocv_size = length / sizeof(u32);
1804
- if (pdata->ocv_size <= 0) {
1810
+ if (pdata->ocv_size < 2) {
18051811 dev_err(dev, "invalid ocv table\n");
18061812 return -EINVAL;
18071813 }
....@@ -2773,6 +2779,8 @@
27732779 finish_sec = base2sec(battery->finish_base);
27742780
27752781 soc_sec = battery->fcc * 3600 / 100 / DIV(finish_current);
2782
+ if (soc_sec == 0)
2783
+ soc_sec = 1;
27762784 plus_soc = finish_sec / DIV(soc_sec);
27772785 if (finish_sec > soc_sec) {
27782786 rest = finish_sec % soc_sec;