power: pm8921-bms: handle restart without pmic power on

There are situation when the system undergoes a restart but the
pmic does not execute its power on sequence. In such case the OCV
value is not updated and the CC value is not cleared. Since OCV
and CC values came from the previous boot, we don't have to use
shutdown soc in this case. The use of shutdown soc without reset
of CC increase error of soc. So this patch remove use of shutdown
soc in restart case.

b/7327066

Change-Id: I2c5c5974a4c8ace076c1f8c56c856718b7140fb8
diff --git a/drivers/power/pm8921-bms.c b/drivers/power/pm8921-bms.c
index 5eff419..0b43c94 100644
--- a/drivers/power/pm8921-bms.c
+++ b/drivers/power/pm8921-bms.c
@@ -55,6 +55,8 @@
 #define TEMP_IAVG_STORAGE	0x105
 #define TEMP_IAVG_STORAGE_USE_MASK	0x0F
 
+#define CC_RAW_5MAH	0x00110000
+
 enum pmic_bms_interrupts {
 	PM8921_BMS_SBI_WRITE_OK,
 	PM8921_BMS_CC_THR,
@@ -1005,7 +1007,6 @@
 	return compensated_ocv;
 }
 
-
 static int read_soc_params_raw(struct pm8921_bms_chip *chip,
 				struct pm8921_soc_params *raw)
 {
@@ -1031,6 +1032,13 @@
 		raw->last_good_ocv_uv = ocv_ir_compensation(chip,
 						raw->last_good_ocv_uv);
 		chip->last_ocv_uv = raw->last_good_ocv_uv;
+
+		if (raw->cc > CC_RAW_5MAH) {
+			shutdown_soc_invalid = 1;
+			pr_info("cc_raw = 0x%x greater than 5mAh 0x%x\n",
+				       raw->cc, CC_RAW_5MAH);
+		}
+
 		pr_debug("PON_OCV_UV = %d\n", chip->last_ocv_uv);
 	} else if (chip->prev_last_good_ocv_raw != raw->last_good_ocv_raw) {
 		chip->prev_last_good_ocv_raw = raw->last_good_ocv_raw;
@@ -2155,8 +2163,8 @@
 					- cc_uah
 					- unusable_charge_uah;
 
-		soc = DIV_ROUND_CLOSEST((remaining_usable_charge_uah * 100),
-					(fcc_uah - unusable_charge_uah));
+		soc = (remaining_usable_charge_uah * 100)/
+					(fcc_uah - unusable_charge_uah);
 
 		pr_debug("DONE for shutdown_soc = %d soc is %d, adjusted ocv to %duV\n",
 				shutdown_soc, soc, chip->last_ocv_uv);