google_battery: vote coresponse CSI types

CSI (Charging Speed Indicator) types vote:
- JEITA
- TRICKLE/DWELL/TEMP-DEFEND
- ADAPTIVE-CHARGE

Bug: 209865753
Signed-off-by: Jenny Ho <[email protected]>
Change-Id: I92ccd44ef0b837a33220056c210e2b11e75b4761
diff --git a/google_battery.c b/google_battery.c
index 236b030..268d6f6 100644
--- a/google_battery.c
+++ b/google_battery.c
@@ -403,6 +403,8 @@
 				    const struct gbms_ce_tier_stats *tier_stat,
 				    bool verbose);
 
+static bool chg_state_is_disconnected(union gbms_charger_state *chg_state);
+
 static inline void batt_update_cycle_count(struct batt_drv *batt_drv)
 {
 	batt_drv->cycle_count = GPSY_GET_PROP(batt_drv->fg_psy,
@@ -2145,6 +2147,40 @@
 
 /* ------------------------------------------------------------------------- */
 
+static void batt_set_csi_type(struct batt_drv *batt_drv)
+{
+	bool is_ac, is_longlife;
+
+	if (!batt_drv->csi_type_votable)
+		batt_drv->csi_type_votable = find_votable(VOTABLE_CSI_TYPE);
+
+	if (!batt_drv->csi_type_votable)
+		return;
+
+	/* ChargingType_NONE */
+	vote(batt_drv->csi_type_votable, "CSI_TYPE_NONE",
+	     chg_state_is_disconnected(&batt_drv->chg_state), CSIType_None);
+
+	/* ChargingType_JEITA */
+	vote(batt_drv->csi_type_votable, "CSI_TYPE_JEITA",
+	     batt_drv->jeita_stop_charging == 1, CSIType_JEITA);
+
+	/* ChargingType_LongLife */
+	is_longlife = batt_drv->ssoc_state.bd_trickle_cnt > 0 ||
+		      batt_drv->batt_health == POWER_SUPPLY_HEALTH_OVERHEAT;
+	vote(batt_drv->csi_type_votable, "CSI_TYPE_LONGLIFE", is_longlife,
+	     CSIType_LongLife);
+
+	/* ChargingType_Adaptive */
+	is_ac = batt_drv->msc_state == MSC_HEALTH ||
+		batt_drv->msc_state == MSC_HEALTH_PAUSE ||
+		batt_drv->msc_state == MSC_HEALTH_ALWAYS_ON;
+	vote(batt_drv->csi_type_votable, "CSI_TYPE_AC", is_ac, CSIType_Adaptive);
+}
+
+
+/* ------------------------------------------------------------------------- */
+
 /* NOTE: should not reset always_on_soc */
 static inline void batt_reset_rest_state(struct batt_chg_health *chg_health)
 {
@@ -3416,6 +3452,9 @@
 			!disable_votes && (batt_drv->msc_update_interval != -1),
 			batt_drv->msc_update_interval);
 
+	/* Update CSI Type */
+	batt_set_csi_type(batt_drv);
+
 msc_logic_exit:
 
 	if (changed) {
diff --git a/google_bms.h b/google_bms.h
index ff5c444..21422b3 100644
--- a/google_bms.h
+++ b/google_bms.h
@@ -283,6 +283,15 @@
 	GBMS_STATS_BD_TI_TRICKLE_CLEARED = 122,
 };
 
+enum natt_csi_type {
+	CSIType_None = 0,	// Disconnected
+	CSIType_Fault = 1,	// Internal Failures
+	CSIType_JEITA = 2,	// HW limits
+	CSIType_LongLife = 3,	// DefenderConditions
+	CSIType_Adaptive = 4,	// AdaptiveCharging
+	CSIType_Normal = 5,
+};
+
 /* health state */
 struct batt_chg_health {
 	int rest_soc;		/* entry criteria */