summaryrefslogtreecommitdiff
path: root/util/ec_sb_firmware_update.c
diff options
context:
space:
mode:
authorBruce <Bruce.Wan@quantatw.com>2016-04-28 14:53:41 +0800
committerchrome-bot <chrome-bot@chromium.org>2016-05-02 21:30:13 -0700
commitd539c79960adda667666b8aa97d1e553ebc1ba8f (patch)
tree56c9774f2388fb9b952952e26754e6b57c2ba5e0 /util/ec_sb_firmware_update.c
parent3b1c3ba36febf50fa3be0e9b68e40be8e413e04d (diff)
downloadchrome-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/ec_sb_firmware_update.c')
-rw-r--r--util/ec_sb_firmware_update.c21
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) {