summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Barnes <robbarnes@google.com>2022-02-28 16:03:18 -0700
committerCommit Bot <commit-bot@chromium.org>2022-03-10 00:47:14 +0000
commit6362dde219dd00f7fc5adcc3457f1d90cfc6c5a4 (patch)
tree846edb6b35e4cf1c90547db566c3f96b44bc4396
parentaf7ccad898330cdc602209633bcefcf1f1b5f2cf (diff)
downloadchrome-ec-6362dde219dd00f7fc5adcc3457f1d90cfc6c5a4.tar.gz
battery: Do not return display_soc if data is bad
If BATT_FLAG_BAD_FULL_CAPACITY or BATT_FLAG_BAD_REMAINING_CAPACITY flags are set, then display_charge value is also bad. Return UNAVALIABLE error rather than 0%. BUG=b:217401040 BRANCH=guybrush TEST=Force battery glitch, do not observe 0% battery in OS Change-Id: Iea861582dde1f7db3d6a4c40e88169d7f74ca159 Signed-off-by: Rob Barnes <robbarnes@google.com> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3496464 Reviewed-by: Daisuke Nojiri <dnojiri@chromium.org> Reviewed-by: Diana Z <dzigterman@chromium.org> (cherry picked from commit b135e45447ba42f276b6f5232e2573d166320b31) Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3514623 Tested-by: Daisuke Nojiri <dnojiri@chromium.org> Auto-Submit: Daisuke Nojiri <dnojiri@chromium.org> Reviewed-by: caveh jalali <caveh@chromium.org> Commit-Queue: caveh jalali <caveh@chromium.org>
-rw-r--r--common/battery.c10
-rw-r--r--include/ec_commands.h8
2 files changed, 18 insertions, 0 deletions
diff --git a/common/battery.c b/common/battery.c
index 7e0baf6986..934c78d347 100644
--- a/common/battery.c
+++ b/common/battery.c
@@ -625,6 +625,16 @@ void battery_compensate_params(struct batt_params *batt)
static int battery_display_soc(struct host_cmd_handler_args *args)
{
struct ec_response_display_soc *r = args->response;
+ const struct batt_params *batt = charger_current_battery_params();
+
+ /*
+ * BATT_FLAG_BAD_FULL_CAPACITY and BATT_FLAG_BAD_REMAINING_CAPACITY are
+ * used to derive display_soc, so if these are bad, display_soc is also
+ * bad.
+ */
+ if ((batt->flags & BATT_FLAG_BAD_FULL_CAPACITY) ||
+ (batt->flags & BATT_FLAG_BAD_REMAINING_CAPACITY))
+ return EC_RES_UNAVAILABLE;
r->display_soc = charge_get_display_charge();
r->full_factor = batt_host_full_factor * 10;
diff --git a/include/ec_commands.h b/include/ec_commands.h
index 3d98585b06..2be578c1fb 100644
--- a/include/ec_commands.h
+++ b/include/ec_commands.h
@@ -5267,6 +5267,14 @@ struct ec_response_rollback_info {
#define EC_CMD_AP_RESET 0x0125
+/*****************************************************************************
+ * Get displayable charge percent
+ *
+ * Return
+ * EC_RES_SUCCESS : Values successfully read
+ * EC_RES_UNAVAILABLE : Values are currently unavailable,
+ * e.g. unresponsive battery.
+ */
#define EC_CMD_DISPLAY_SOC 0x0137
struct ec_response_display_soc {