power: pm8921-bms: account for capacitive drop
As the battery discharges, we need to account for the voltage drop across
capacitance in the battery. This voltage drop can be simulated using
a resistance in series with the battery such that it increases as state of
charge of the battery decreases.
Add parameter to account for this resistance in the profile tables.
Change-Id: Ic67b798ae8f480d8f42d9321e3847c4294bf7db3
Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
diff --git a/drivers/power/pm8921-bms.c b/drivers/power/pm8921-bms.c
index 8259515..b93ea95 100644
--- a/drivers/power/pm8921-bms.c
+++ b/drivers/power/pm8921-bms.c
@@ -94,6 +94,7 @@
struct pc_temp_ocv_lut *pc_temp_ocv_lut;
struct sf_lut *pc_sf_lut;
struct sf_lut *rbatt_sf_lut;
+ int delta_rbatt_mohm;
struct work_struct calib_hkadc_work;
struct delayed_work calib_ccadc_work;
unsigned int calib_delay_ms;
@@ -996,6 +997,13 @@
pr_debug("adding rconn_mohm = %d rbatt = %d\n",
the_chip->rconn_mohm, rbatt);
+ if (is_between(20, 10, soc_rbatt))
+ rbatt = rbatt
+ + ((20 - soc_rbatt) * chip->delta_rbatt_mohm) / 10;
+ else
+ if (is_between(10, 0, soc_rbatt))
+ rbatt = rbatt + chip->delta_rbatt_mohm;
+
pr_debug("RBATT = %d\n", rbatt);
return rbatt;
}
@@ -1961,6 +1969,7 @@
chip->rbatt_sf_lut = palladium_1500_data.rbatt_sf_lut;
chip->default_rbatt_mohm
= palladium_1500_data.default_rbatt_mohm;
+ chip->delta_rbatt_mohm = palladium_1500_data.delta_rbatt_mohm;
return 0;
desay:
chip->fcc = desay_5200_data.fcc;
@@ -1969,6 +1978,7 @@
chip->pc_sf_lut = desay_5200_data.pc_sf_lut;
chip->rbatt_sf_lut = desay_5200_data.rbatt_sf_lut;
chip->default_rbatt_mohm = desay_5200_data.default_rbatt_mohm;
+ chip->delta_rbatt_mohm = desay_5200_data.delta_rbatt_mohm;
return 0;
}