diff options
author | Bruce <Bruce.Wan@quantatw.com> | 2016-04-28 14:53:41 +0800 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2016-05-02 21:30:13 -0700 |
commit | d539c79960adda667666b8aa97d1e553ebc1ba8f (patch) | |
tree | 56c9774f2388fb9b952952e26754e6b57c2ba5e0 /util | |
parent | 3b1c3ba36febf50fa3be0e9b68e40be8e413e04d (diff) | |
download | chrome-ec-d539c79960adda667666b8aa97d1e553ebc1ba8f.tar.gz |
sb_firmware_update: Set ac flag at fw update mode
Some reason cause the power off during battery fw update process.
Then execute the process again, tool can't detect AC because EC
can't read data from battery. So set AC_PRESS flag after check
battery is in battery fw update mode.
BUG=None
BRANCH=None
TEST=check the battery can execute fw update in this case.
Change-Id: Iafe501eb1719a12425d5cac42d27c897e078acc1
Signed-off-by: Bruce.Wan <Bruce.Wan@quantatw.com>
Reviewed-on: https://chromium-review.googlesource.com/341044
Commit-Ready: Keith Tzeng <keith.tzeng@quantatw.com>
Tested-by: Keith Tzeng <keith.tzeng@quantatw.com>
Reviewed-by: Shawn N <shawnn@chromium.org>
Diffstat (limited to 'util')
-rw-r--r-- | util/ec_sb_firmware_update.c | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/util/ec_sb_firmware_update.c b/util/ec_sb_firmware_update.c index 3ec6e2b6a4..538d575f07 100644 --- a/util/ec_sb_firmware_update.c +++ b/util/ec_sb_firmware_update.c @@ -769,9 +769,26 @@ int main(int argc, char *argv[]) goto out; } - if (val & EC_BATT_FLAG_AC_PRESENT) { + rv = get_status(&fw_update.status); + if (rv) { + fw_update.rv = -1; + log_msg(&fw_update, S1_READ_INFO, "Interface Error"); + return S10_TERMINAL; + } + + if (fw_update.status.fw_update_mode) { + /* + * Previous battery firmware update was interrupted, + * and we may not detect the presence of AC correctly. + * Therefore, lie about our AC status. + */ fw_update.flags |= F_AC_PRESENT; - printf("AC_PRESENT\n"); + printf("Assuming AC_PRESENT due to interrupted FW update\n"); + } else { + if (val & EC_BATT_FLAG_AC_PRESENT) { + fw_update.flags |= F_AC_PRESENT; + printf("AC_PRESENT\n"); + } } rv = ec_readmem(EC_MEMMAP_BATT_LFCC, sizeof(val), &val); if (rv <= 0) { |