google_battery: Add bd_clear to reset trickle-defend data

Create a sysfs node, bd_clear, to reset trickle-defend data

Bug: 194447425
Change-Id: Ic771f2b80a3864de0cf256a7049491d0c45f597d
Signed-off-by: Ken Tsou <[email protected]>
diff --git a/google_battery.c b/google_battery.c
index d83d3a4..97ba09a 100644
--- a/google_battery.c
+++ b/google_battery.c
@@ -2879,6 +2879,12 @@
 	ssoc_state->buck_enabled = ben;
 }
 
+static void bd_trickle_reset(struct batt_ssoc_state *ssoc_state)
+{
+	ssoc_state->bd_trickle_cnt = 0;
+	ssoc_state->disconnect_time = 0;
+}
+
 static void batt_prlog_din(union gbms_charger_state *chg_state, int log_level)
 {
 	batt_prlog(log_level,
@@ -4372,6 +4378,26 @@
 static DEVICE_ATTR(bd_trickle_reset_sec, 0660,
 		   show_bd_trickle_reset_sec, set_bd_trickle_reset_sec);
 
+static ssize_t bd_clear_store(struct device *dev,
+			      struct device_attribute *attr,
+			      const char *buf, size_t count)
+{
+	struct power_supply *psy = container_of(dev, struct power_supply, dev);
+	struct batt_drv *batt_drv = power_supply_get_drvdata(psy);
+	int ret = 0, val = 0;
+
+	ret = kstrtoint(buf, 0, &val);
+	if (ret < 0)
+		return ret;
+
+	if (val)
+		bd_trickle_reset(&batt_drv->ssoc_state);
+
+	return count;
+}
+
+static DEVICE_ATTR_WO(bd_clear);
+
 static ssize_t batt_show_time_to_ac(struct device *dev,
 				    struct device_attribute *attr, char *buf)
 {
@@ -4614,6 +4640,10 @@
 	if (ret)
 		dev_err(&batt_drv->psy->dev, "Failed to create bd_trickle_reset_sec\n");
 
+	ret = device_create_file(&batt_drv->psy->dev, &dev_attr_bd_clear);
+	if (ret)
+		dev_err(&batt_drv->psy->dev, "Failed to create bd_clear\n");
+
 	ret = device_create_file(&batt_drv->psy->dev, &dev_attr_pairing_state);
 	if (ret)
 		dev_err(&batt_drv->psy->dev, "Failed to create pairing_state\n");