power: pm8921-bms: fix division error
Arithmetic conversion rules states that a signed operand is converted
to unsigned if the other operand is unsigned.
The voltage across vsense is a signed int and it can be negative.
Dividing it by the battery sense resistor, an unsigned int, was
resulting in a very large positive number instead of a negative number.
Fix it by casting the battery sense resistor to signed so that a
a signed division is performed.
Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
diff --git a/drivers/power/pm8921-bms.c b/drivers/power/pm8921-bms.c
index 7c73c23..3a34a6a 100644
--- a/drivers/power/pm8921-bms.c
+++ b/drivers/power/pm8921-bms.c
@@ -872,7 +872,8 @@
read_vsense_avg(the_chip, result);
pr_debug("vsense=%d\n", *result);
- *result = *result / the_chip->r_sense;
+ /* cast for signed division */
+ *result = *result / (int)the_chip->r_sense;
return 0;
}
EXPORT_SYMBOL(pm8921_bms_get_battery_current);