summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSheng-Liang Song <ssl@chromium.org>2015-06-10 14:49:59 -0700
committerChromeOS Commit Bot <chromeos-commit-bot@chromium.org>2015-06-11 01:15:26 +0000
commit7c54721b173bff97be61f2c0d2d07fea01b1e051 (patch)
treeae2a82b53359fbed037cf1c608e79f17292d3ef8
parent64129d1f47de2527f407291d5b092b14fbef3fb7 (diff)
downloadchrome-ec-7c54721b173bff97be61f2c0d2d07fea01b1e051.tar.gz
EC: Fixed battery percentage icon not displaying properly.
After chrome OS upstart script checks for the battery version, the EC enters an firmware update in progress state. The solution is to simplify the sb_fw_update_in_progress() logic. I removed the i2c interface flag, i2c_access_enable flag. New battery firmware update in progress logic is computed just based the current state. If the current smart battery firmware update state is EC_SB_FW_UPDATE_WRITE or EC_SB_FW_UPDATE_BEGIN, then tell EC subsystem that a smart battery firmware update is progress and skip other non battery update commands. BUG=chromium:497809 BRANCH=glimmer TEST=Verified Simplo Battery Update on glimmer Change-Id: Iff6fb7fabd78908a9e7a24afa554038a45cee7c3 Signed-off-by: Sheng-Liang Song <ssl@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/276743 Reviewed-by: Shawn N <shawnn@chromium.org>
-rw-r--r--driver/battery/sb_fw_update.c25
1 files changed, 4 insertions, 21 deletions
diff --git a/driver/battery/sb_fw_update.c b/driver/battery/sb_fw_update.c
index 4a4949055e..942e23db4d 100644
--- a/driver/battery/sb_fw_update.c
+++ b/driver/battery/sb_fw_update.c
@@ -23,8 +23,6 @@
static struct ec_sb_fw_update_header sb_fw_hdr;
-static int i2c_access_enable;
-
static int get_state(void)
{
return sb_fw_hdr.subcmd;
@@ -37,7 +35,9 @@ static void set_state(int subcmd)
int sb_fw_update_in_progress(void)
{
- return i2c_access_enable;
+ int state = get_state();
+ return (state == EC_SB_FW_UPDATE_WRITE) ||
+ (state == EC_SB_FW_UPDATE_BEGIN);
}
/*
@@ -47,7 +47,6 @@ int sb_fw_update_in_progress(void)
static void set_ap_suspend(void)
{
set_state(EC_SB_FW_UPDATE_PROTECT);
- i2c_access_enable = 0;
}
DECLARE_HOOK(HOOK_CHIPSET_SUSPEND, set_ap_suspend, HOOK_PRIO_DEFAULT);
@@ -58,7 +57,6 @@ DECLARE_HOOK(HOOK_CHIPSET_SUSPEND, set_ap_suspend, HOOK_PRIO_DEFAULT);
static void set_ap_resume(void)
{
set_state(EC_SB_FW_UPDATE_PREPARE);
- i2c_access_enable = 0;
}
DECLARE_HOOK(HOOK_CHIPSET_RESUME, set_ap_resume, HOOK_PRIO_DEFAULT);
@@ -80,7 +78,7 @@ static int is_protected(void)
return 1;
}
- return !i2c_access_enable;
+ return 0;
}
static int prepare_update(struct host_cmd_handler_args *args)
@@ -126,9 +124,6 @@ static int begin_update(struct host_cmd_handler_args *args)
return EC_RES_INVALID_COMMAND;
}
- if (!i2c_access_enable)
- return EC_RES_ERROR;
-
set_state(EC_SB_FW_UPDATE_BEGIN);
rv = smbus_write_word(I2C_PORT_BATTERY, BATTERY_ADDR,
@@ -150,8 +145,6 @@ static int end_update(struct host_cmd_handler_args *args)
set_state(EC_SB_FW_UPDATE_END);
args->response_size = 0;
- if (!i2c_access_enable)
- return EC_RES_ERROR;
rv = smbus_write_word(I2C_PORT_BATTERY, BATTERY_ADDR,
SB_FW_UPDATE_CMD_WRITE_WORD,
@@ -180,12 +173,6 @@ static int get_info(struct host_cmd_handler_args *args)
args->response_size = len;
- if (!i2c_access_enable) {
- CPRINTF("smbus cmd:%x rd info - protect error\n",
- SB_FW_UPDATE_CMD_READ_INFO);
- return EC_RES_ERROR;
- }
-
rv = smbus_read_block(I2C_PORT_BATTERY, BATTERY_ADDR,
SB_FW_UPDATE_CMD_READ_INFO, resp->info.data, &len);
if (rv) {
@@ -208,9 +195,6 @@ static int get_status(struct host_cmd_handler_args *args)
struct sb_fw_update_status *sts =
(struct sb_fw_update_status *) resp->status.data;
- /* Enable smart battery i2c access */
- i2c_access_enable = 1;
-
args->response_size = SB_FW_UPDATE_CMD_STATUS_SIZE;
rv = smbus_read_word(I2C_PORT_BATTERY, BATTERY_ADDR,
@@ -231,7 +215,6 @@ static int get_status(struct host_cmd_handler_args *args)
static int set_protect(struct host_cmd_handler_args *args)
{
set_state(EC_SB_FW_UPDATE_PROTECT);
- i2c_access_enable = 0;
CPRINTF("firmware enter protect state !\n");
args->response_size = 0;
return EC_RES_SUCCESS;