.. | .. |
---|
651 | 651 | u8 i; |
---|
652 | 652 | u16 d; |
---|
653 | 653 | |
---|
| 654 | + if (size < 2) |
---|
| 655 | + return 0; |
---|
| 656 | + |
---|
654 | 657 | for (i = 0; i < size; i++) { |
---|
655 | 658 | if (value < table[i]) |
---|
656 | 659 | break; |
---|
.. | .. |
---|
1599 | 1602 | battery->pwron_voltage) * 1000;/* uAH */ |
---|
1600 | 1603 | battery->dsoc = battery->rsoc; |
---|
1601 | 1604 | battery->fcc = battery->pdata->design_capacity; |
---|
| 1605 | + if (battery->fcc < MIN_FCC) |
---|
| 1606 | + battery->fcc = MIN_FCC; |
---|
| 1607 | + |
---|
1602 | 1608 | battery->nac = rk817_bat_vol_to_cap(battery, battery->pwron_voltage); |
---|
1603 | 1609 | |
---|
1604 | 1610 | rk817_bat_update_qmax(battery, battery->qmax); |
---|
.. | .. |
---|
1801 | 1807 | } |
---|
1802 | 1808 | |
---|
1803 | 1809 | pdata->ocv_size = length / sizeof(u32); |
---|
1804 | | - if (pdata->ocv_size <= 0) { |
---|
| 1810 | + if (pdata->ocv_size < 2) { |
---|
1805 | 1811 | dev_err(dev, "invalid ocv table\n"); |
---|
1806 | 1812 | return -EINVAL; |
---|
1807 | 1813 | } |
---|
.. | .. |
---|
2773 | 2779 | finish_sec = base2sec(battery->finish_base); |
---|
2774 | 2780 | |
---|
2775 | 2781 | soc_sec = battery->fcc * 3600 / 100 / DIV(finish_current); |
---|
| 2782 | + if (soc_sec == 0) |
---|
| 2783 | + soc_sec = 1; |
---|
2776 | 2784 | plus_soc = finish_sec / DIV(soc_sec); |
---|
2777 | 2785 | if (finish_sec > soc_sec) { |
---|
2778 | 2786 | rest = finish_sec % soc_sec; |
---|