diff options
author | Sheng-Liang Song <ssl@chromium.org> | 2014-10-08 15:39:40 -0700 |
---|---|---|
committer | chrome-internal-fetch <chrome-internal-fetch@google.com> | 2014-10-09 03:02:11 +0000 |
commit | f7aaa41451104fb4b4f81e53ed95784023bd1da4 (patch) | |
tree | d133e3b04e2d6e2ec78ea08611b09a72398289b5 | |
parent | 5eca9c3dc67d45eb9a4854b7ce92ee9588081dc4 (diff) | |
download | chrome-ec-f7aaa41451104fb4b4f81e53ed95784023bd1da4.tar.gz |
glimmer: Fixed Get Battery Model Name
Root Cause:
1. smbus crc8 checking logic was added recently.
2. SMP Battery Model is "LNV-45N1751", that is greater than 8 bytes.
battery_manufacturer_name hard code 8 byte in length parameter.
It failed the smbus crc8 checking on read. So, a "NULL" is returned.
However, our current EC memory map only supports 8 bytes for model number.
EC_MEMMAP_TEXT_MAX should be increased in main branch in the future.
For Glimmer branch, a quick fix is applied--only copy and return the
beginning 7 bytes of Model Name. It keeps the same model string as before.
BUG=chrome-os-partner:32761
BRANCH=Glimmer Firmware Branch
TEST=Run ectool from linux shell.
Change-Id: I47e8272625ffcebdefeb28f928237c1800831ba1
Signed-off-by: Sheng-liang Song <ssl@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/222403
Reviewed-by: Alec Berg <alecaberg@chromium.org>
-rw-r--r-- | common/charge_state.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/common/charge_state.c b/common/charge_state.c index 8e16c61aa2..b901c9224e 100644 --- a/common/charge_state.c +++ b/common/charge_state.c @@ -66,6 +66,7 @@ static void update_battery_info(void) { char *batt_str; int batt_serial; + char temp[32]; /* Design Capacity of Full */ battery_design_capacity((int *)host_get_memmap(EC_MEMMAP_BATT_DCAP)); @@ -82,13 +83,15 @@ static void update_battery_info(void) /* Battery Manufacturer string */ batt_str = (char *)host_get_memmap(EC_MEMMAP_BATT_MFGR); + battery_manufacturer_name(temp, sizeof(temp)); memset(batt_str, 0, EC_MEMMAP_TEXT_MAX); - battery_manufacturer_name(batt_str, EC_MEMMAP_TEXT_MAX); + memcpy(batt_str, temp, EC_MEMMAP_TEXT_MAX-1); /* Battery Model string */ batt_str = (char *)host_get_memmap(EC_MEMMAP_BATT_MODEL); + battery_device_name(temp, sizeof(temp)); memset(batt_str, 0, EC_MEMMAP_TEXT_MAX); - battery_device_name(batt_str, EC_MEMMAP_TEXT_MAX); + memcpy(batt_str, temp, EC_MEMMAP_TEXT_MAX-1); /* Battery Type string */ batt_str = (char *)host_get_memmap(EC_MEMMAP_BATT_TYPE); |