diff options
author | Scott Collyer <scollyer@google.com> | 2021-11-23 15:04:49 -0800 |
---|---|---|
committer | Scott Collyer <scollyer@google.com> | 2021-11-23 15:04:49 -0800 |
commit | 817cf2223b0b33c91ca6e369b644cbc4d6c361e3 (patch) | |
tree | f698bbab73d87af25f9fdc2d49f50a0c25111a79 /zephyr/emul/emul_smart_battery.c | |
parent | 6da8436a8ce04a7f88f80049a10638e1b8f6439d (diff) | |
parent | 0349a5b6d95308141754523708a2d11d8bacce4c (diff) | |
download | chrome-ec-817cf2223b0b33c91ca6e369b644cbc4d6c361e3.tar.gz |
Merge remote-tracking branch 'cros/main' into firmware-gwc-fsi
Change-Id: Id9b5b5cb1db7428cd9f12452d73842d8c1f2705a
Diffstat (limited to 'zephyr/emul/emul_smart_battery.c')
-rw-r--r-- | zephyr/emul/emul_smart_battery.c | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/zephyr/emul/emul_smart_battery.c b/zephyr/emul/emul_smart_battery.c index 279e08719d..136d81cc35 100644 --- a/zephyr/emul/emul_smart_battery.c +++ b/zephyr/emul/emul_smart_battery.c @@ -586,20 +586,21 @@ static int sbat_emul_handle_read_msg(struct i2c_emul *emul, int reg) /* Handle commands which return block */ ret = sbat_emul_get_block_data(emul, reg, &blk, &len); - if (ret != 0) { - if (ret == 1) { - data->bat.error_code = STATUS_CODE_UNSUPPORTED; - LOG_ERR("Unknown read command (0x%x)", reg); - } - + if (ret < 0) { return -EIO; } + if (ret == 0) { + data->num_to_read = len + 1; + data->msg_buf[0] = len; + memcpy(&data->msg_buf[1], blk, len); + data->bat.error_code = STATUS_CODE_OK; + sbat_emul_append_pec(data, reg); - data->num_to_read = len + 1; - data->msg_buf[0] = len; - memcpy(&data->msg_buf[1], blk, len); - data->bat.error_code = STATUS_CODE_OK; - sbat_emul_append_pec(data, reg); + return 0; + } + + /* Command is unknown. Wait for custom handler before failing. */ + data->num_to_read = 0; return 0; } @@ -740,6 +741,13 @@ static int sbat_emul_read_byte(struct i2c_emul *emul, int reg, uint8_t *val, data = SBAT_DATA_FROM_I2C_EMUL(emul); + if (data->num_to_read == 0) { + data->bat.error_code = STATUS_CODE_UNSUPPORTED; + LOG_ERR("Unknown read command (0x%x)", reg); + + return -EIO; + } + if (bytes < data->num_to_read) { *val = data->msg_buf[bytes]; } |