diff options
author | arthur.lin <arthur.lin@lcfc.corp-partner.google.com> | 2022-12-12 17:04:48 +0800 |
---|---|---|
committer | Chromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com> | 2022-12-20 06:58:31 +0000 |
commit | a712b640bdaede7d984d7159381f8a5929292af4 (patch) | |
tree | 0c6b6d50418e00e6b9842da6fc9b608c16cb9ee0 /driver/battery/smart.c | |
parent | 2c295f9106d4ffbcccd414c33938edb11f6a2d06 (diff) | |
download | chrome-ec-a712b640bdaede7d984d7159381f8a5929292af4.tar.gz |
battery: Avoid read battery when cut off process
Avoid read battery data when starting battery cut off process.
BUG=b:260684835
BRANCH=none
TEST=zmake build -a
Change-Id: I739e6c46f79a1455a8dbfdfb2c63a146296c6372
Signed-off-by: arthur.lin <arthur.lin@lcfc.corp-partner.google.com>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/4096318
Code-Coverage: Zoss <zoss-cl-coverage@prod.google.com>
Code-Coverage: Daisuke Nojiri <dnojiri@chromium.org>
Reviewed-by: Daisuke Nojiri <dnojiri@chromium.org>
Diffstat (limited to 'driver/battery/smart.c')
-rw-r--r-- | driver/battery/smart.c | 36 |
1 files changed, 33 insertions, 3 deletions
diff --git a/driver/battery/smart.c b/driver/battery/smart.c index 1f9512ce71..539580d201 100644 --- a/driver/battery/smart.c +++ b/driver/battery/smart.c @@ -50,6 +50,13 @@ test_mockable int sb_read(int cmd, int *param) #ifdef CONFIG_BATTERY_CUT_OFF /* + * Ship mode command need to set continuously, can't be interfered + * by another command. + */ + if (battery_cutoff_in_progress()) + return EC_ERROR_ACCESS_DENIED; + + /* * Some batteries would wake up after cut-off if we talk to it. */ if (battery_is_cut_off()) @@ -84,6 +91,13 @@ int sb_read_string(int offset, uint8_t *data, int len) #ifdef CONFIG_BATTERY_CUT_OFF /* + * Ship mode command need to set continuously, can't be interfered + * by another command. + */ + if (battery_cutoff_in_progress()) + return EC_ERROR_ACCESS_DENIED; + + /* * Some batteries would wake up after cut-off if we talk to it. */ if (battery_is_cut_off()) @@ -102,6 +116,13 @@ int sb_read_sized_block(int offset, uint8_t *data, int len) if (IS_ENABLED(CONFIG_BATTERY_CUT_OFF)) { /* + * Ship mode command need to set continuously, can't be + * interfered by another command. + */ + if (battery_cutoff_in_progress()) + return EC_ERROR_ACCESS_DENIED; + + /* * Some batteries would wake up after cut-off if we talk to it. */ if (battery_is_cut_off()) @@ -669,7 +690,10 @@ host_command_sb_read_word(struct host_cmd_handler_args *args) return EC_RES_INVALID_PARAM; rv = sb_read(p->reg, &val); if (rv) - return EC_RES_ERROR; + if (rv == EC_ERROR_ACCESS_DENIED) + return EC_RES_ACCESS_DENIED; + else + return EC_RES_ERROR; r->value = val; args->response_size = sizeof(struct ec_response_sb_rd_word); @@ -689,7 +713,10 @@ host_command_sb_write_word(struct host_cmd_handler_args *args) return EC_RES_INVALID_PARAM; rv = sb_write(p->reg, p->value); if (rv) - return EC_RES_ERROR; + if (rv == EC_ERROR_ACCESS_DENIED) + return EC_RES_ACCESS_DENIED; + else + return EC_RES_ERROR; return EC_RES_SUCCESS; } @@ -708,7 +735,10 @@ host_command_sb_read_block(struct host_cmd_handler_args *args) return EC_RES_INVALID_PARAM; rv = sb_read_string(p->reg, r->data, 32); if (rv) - return EC_RES_ERROR; + if (rv == EC_ERROR_ACCESS_DENIED) + return EC_RES_ACCESS_DENIED; + else + return EC_RES_ERROR; args->response_size = sizeof(struct ec_response_sb_rd_block); |