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");