power: pm8921-bms: Add api to read Vsense

The Rsense resistor connects between the -ve end of the battery
and GND. The voltage across the Rsense gives us a good indication
of the current flowing through the battery.

Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
diff --git a/drivers/power/pm8921-bms.c b/drivers/power/pm8921-bms.c
index e6e59de..eb98eed 100644
--- a/drivers/power/pm8921-bms.c
+++ b/drivers/power/pm8921-bms.c
@@ -285,6 +285,21 @@
 	return 0;
 }
 
+static int read_vsense_avg(struct pm8921_bms_chip *chip, int *result)
+{
+	int rc;
+	int16_t reading;
+
+	rc = pm_bms_read_output_data(chip, VSENSE_AVG, &reading);
+	if (rc) {
+		pr_err("fail to read VSENSE_AVG rc = %d\n", rc);
+		return rc;
+	}
+	*result = CONV_READING(reading);
+	pr_debug("read = %04x vsense = %d\n", reading, *result);
+	return 0;
+}
+
 static int linear_interpolate(int y0, int x0, int y1, int x1, int x)
 {
 	if (y0 == y1 || x == x0)
@@ -709,6 +724,16 @@
 	return soc;
 }
 
+int pm8921_bms_get_vsense_avg(int *result)
+{
+	if (the_chip)
+		return read_vsense_avg(the_chip, result);
+
+	pr_err("called before initialization\n");
+	return -EINVAL;
+}
+EXPORT_SYMBOL(pm8921_bms_get_vsense_avg);
+
 int pm8921_bms_get_percent_charge(void)
 {
 	int batt_temp, rc;
@@ -1004,6 +1029,9 @@
 	case OCV_FOR_RBATT:
 		read_ocv_for_rbatt(the_chip, (uint *)val);
 		break;
+	case VSENSE_AVG:
+		read_vsense_avg(the_chip, (uint *)val);
+		break;
 	default:
 		ret = -EINVAL;
 	}
@@ -1107,6 +1135,8 @@
 				(void *)VSENSE_FOR_RBATT, &reading_fops);
 	debugfs_create_file("read_ocv_for_rbatt", 0644, chip->dent,
 				(void *)OCV_FOR_RBATT, &reading_fops);
+	debugfs_create_file("read_vsense_avg", 0644, chip->dent,
+				(void *)VSENSE_AVG, &reading_fops);
 
 	debugfs_create_file("show_rbatt", 0644, chip->dent,
 				(void *)CALC_RBATT, &calc_fops);