max1720x_battery: log check failures
Log model load/reload and check to EEPROM
Bug: 191319560
Signed-off-by: AleX Pelosi <[email protected]>
Change-Id: I9056669eef3b299982e54b025af9320ac4afb9d0
diff --git a/max1720x_battery.c b/max1720x_battery.c
index fa4649d..b07dc53 100644
--- a/max1720x_battery.c
+++ b/max1720x_battery.c
@@ -3773,6 +3773,34 @@
return 0;
}
+static int max1720x_log_event(struct max1720x_chip *chip, gbms_tag_t tag)
+{
+ u8 event_count;
+ int ret = 0;
+
+ ret = gbms_storage_read(tag, &event_count, sizeof(event_count));
+ if (ret < 0)
+ return ret;
+
+ /* max count */
+ if (event_count == 0xFE)
+ return 0;
+
+ /* initial value */
+ if (event_count == 0xFF)
+ event_count = 1;
+ else
+ event_count++;
+
+ ret = gbms_storage_write(tag, &event_count, sizeof(event_count));
+ if (ret < 0)
+ return ret;
+
+ dev_info(chip->dev, "tag:0x%X, event_count:%d\n", tag, event_count);
+
+ return 0;
+}
+
/* handle recovery of FG state */
static int max1720x_init_max_m5(struct max1720x_chip *chip)
{
@@ -3788,6 +3816,7 @@
dev_warn(chip->dev, "GMSR: RC2 model data erased\n");
}
+ /* this is expected */
ret = max1720x_full_reset(chip);
dev_warn(chip->dev, "FG Version Changed, Reset (%d), Will Reload\n",
@@ -3802,14 +3831,22 @@
return -EPROBE_DEFER;
}
+ /* this is a real failure and must be logged */
ret = max_m5_model_check_state(chip->model_data);
if (ret < 0) {
- ret = max1720x_full_reset(chip);
- if (ret == 0)
- ret = max_m5_model_read_state(chip->model_data);
+ int rret, sret = -1;
- dev_err(chip->dev, "FG State Corrupt, Reset (%d), Will reload\n",
- ret);
+ rret = max1720x_full_reset(chip);
+ if (rret == 0)
+ sret = max_m5_model_read_state(chip->model_data);
+
+ dev_err(chip->dev, "FG State Corrupt (%d), Reset (%d), State (%d) Will reload\n",
+ ret, rret, sret);
+
+ ret = max1720x_log_event(chip, GBMS_TAG_SELC);
+ if (ret < 0)
+ dev_err(chip->dev, "Cannot log the event (%d)\n", ret);
+
return 0;
}
@@ -3821,6 +3858,11 @@
dev_err(chip->dev, "Invalid config data, Reset (%d), Will reload\n",
ret);
+
+ ret = max1720x_log_event(chip, GBMS_TAG_CELC);
+ if (ret < 0)
+ dev_err(chip->dev, "Cannot log the event (%d)\n", ret);
+
return 0;
}