virtual_battery: Avoid unexpected batt_mode_cache refreshing

Currently we are assuming batt_mode would never be zero, but that is not
always true. Some battery do report zero for batt_mode(bob for example).

So everytime the batt_mode_cache been set to zero, the virtual_battery
would consider it uninited, and tries to refresh the next time.

Use -1 as uninited batt_mode_cache to avoid that.

BUG=b:66555246
BRANCH=gru
TEST=Check on bob, the battery level is correct.

Change-Id: Ieb7ec9403f69a6b5bca93c6682ec6117fe95fe1e
Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com>
Reviewed-on: https://chromium-review.googlesource.com/678135
Reviewed-by: Douglas Anderson <dianders@chromium.org>
Reviewed-by: Philip Chen <philipchen@chromium.org>
Reviewed-by: Shawn N <shawnn@chromium.org>
This commit is contained in:
Jeffy Chen
2017-09-22 12:37:52 +08:00
committed by chrome-bot
parent 13fb9ac539
commit 0ddaa7d9eb

View File

@@ -16,6 +16,8 @@
#define CPUTS(outstr) cputs(CC_I2C, outstr)
#define CPRINTS(format, args...) cprints(CC_I2C, format, ## args)
#define BATT_MODE_UNINITIALIZED -1
/*
* The state machine used to parse smart battery command
* to support virtual battery.
@@ -182,7 +184,7 @@ int virtual_battery_operation(const uint8_t *batt_cmd_head,
* Note that we don't update the cached capacity: We do a real-time
* conversion and return the converted values.
*/
static int batt_mode_cache;
static int batt_mode_cache = BATT_MODE_UNINITIALIZED;
const struct batt_params *curr_batt;
/*
* Don't allow host reads into arbitrary memory space, most params
@@ -197,7 +199,7 @@ int virtual_battery_operation(const uint8_t *batt_cmd_head,
batt_mode_cache = batt_cmd_head[1] |
(batt_cmd_head[2] << 8);
} else if (read_len > 0) {
if (batt_mode_cache == 0)
if (batt_mode_cache == BATT_MODE_UNINITIALIZED)
/*
* Read the battery operational mode from
* the battery to initialize batt_mode_cache.