diff options
author | Peter Marheine <pmarheine@chromium.org> | 2023-05-04 13:07:16 +1000 |
---|---|---|
committer | Chromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com> | 2023-05-05 01:35:32 +0000 |
commit | d814285d6f6fc36ddc948ed9d65b451bcd0e2b21 (patch) | |
tree | 5936fd3a46ed8ea53a0c1c19817451002c8b911e | |
parent | 21a314ea7aad34fc7930ea207d07c6b1eb34b7c9 (diff) | |
download | chrome-ec-d814285d6f6fc36ddc948ed9d65b451bcd0e2b21.tar.gz |
sm5803: restore load-bearing ERROR_UNIMPLEMENTED
The OCPC code seems to use ERROR_UNIMPLEMENTED as a signal that it should
do some work, and SUCCESS as a signal that everything has been done.
Always returning success appears to cause incorrect charging behavior:
restore the unconditional ERROR_UNIMPLEMENTED that was removed in commit
ae68afbb5d58ce7af0be3e04f833900b105021cd and change the test to reflect
this.
A note is added to the definition of this driver field to document that
ERROR_UNIMPLEMENTED is an expected normal result.
BUG=b:280530115
TEST=Battery once again charges on Yaviks port C1 when
connected to a charger.
Change-Id: I491247148c523123206fefcdbcde62a92ea8caf4
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/4506012
Reviewed-by: Aseda Aboagye <aaboagye@chromium.org>
Tested-by: Peter Marheine <pmarheine@chromium.org>
Commit-Queue: Peter Marheine <pmarheine@chromium.org>
-rw-r--r-- | driver/charger/sm5803.c | 2 | ||||
-rw-r--r-- | include/charger.h | 4 | ||||
-rw-r--r-- | zephyr/test/drivers/sm5803/src/sm5803.c | 17 |
3 files changed, 17 insertions, 6 deletions
diff --git a/driver/charger/sm5803.c b/driver/charger/sm5803.c index 313a3cd321..391c60956a 100644 --- a/driver/charger/sm5803.c +++ b/driver/charger/sm5803.c @@ -1952,7 +1952,7 @@ static enum ec_error_list sm5803_set_vsys_compensation(int chgnum, if (rv) return EC_ERROR_UNKNOWN; - return EC_SUCCESS; + return EC_ERROR_UNIMPLEMENTED; } /* Hardware current ramping (aka DPM: Dynamic Power Management) */ diff --git a/include/charger.h b/include/charger.h index caeaf3fc59..468d267bb8 100644 --- a/include/charger.h +++ b/include/charger.h @@ -127,6 +127,10 @@ struct charger_drv { /* * Some chargers can perform VSYS output compensation. Configure the * charger IC with the right parameters. + * + * Returns EC_ERROR_UNIMPLEMENTED if further action is required from the + * OCPC control loop (which is typical), EC_SUCCESS if no further action + * is required, or any other status on error. */ enum ec_error_list (*set_vsys_compensation)(int chgnum, struct ocpc_data *o, diff --git a/zephyr/test/drivers/sm5803/src/sm5803.c b/zephyr/test/drivers/sm5803/src/sm5803.c index 6780706a0a..c05d39e791 100644 --- a/zephyr/test/drivers/sm5803/src/sm5803.c +++ b/zephyr/test/drivers/sm5803/src/sm5803.c @@ -767,21 +767,27 @@ ZTEST(sm5803, test_vsys_compensation) /* Minimum possible resistance */ ocpc.combined_rsys_rbatt_mo = 0; - zassert_ok(sm5803_drv.set_vsys_compensation(CHARGER_NUM, &ocpc, 0, 0)); + zassert_equal(sm5803_drv.set_vsys_compensation(CHARGER_NUM, &ocpc, 0, + 0), + EC_ERROR_UNIMPLEMENTED); zassert_equal(sm5803_emul_get_ir_comp(SM5803_EMUL), 0x2100, "actual IR_COMP value was %#x", sm5803_emul_get_ir_comp(SM5803_EMUL)); /* Maximum resistance supported by SM5803 (1.67 mOhm * 0x3FF) */ ocpc.combined_rsys_rbatt_mo = 1709; - zassert_ok(sm5803_drv.set_vsys_compensation(CHARGER_NUM, &ocpc, 0, 0)); + zassert_equal(sm5803_drv.set_vsys_compensation(CHARGER_NUM, &ocpc, 0, + 0), + EC_ERROR_UNIMPLEMENTED); zassert_equal(sm5803_emul_get_ir_comp(SM5803_EMUL), 0xE1FF, "actual IR_COMP value was %#x", sm5803_emul_get_ir_comp(SM5803_EMUL)); /* Typical actual resistance */ ocpc.combined_rsys_rbatt_mo = 42; - zassert_ok(sm5803_drv.set_vsys_compensation(CHARGER_NUM, &ocpc, 0, 0)); + zassert_equal(sm5803_drv.set_vsys_compensation(CHARGER_NUM, &ocpc, 0, + 0), + EC_ERROR_UNIMPLEMENTED); zassert_equal(sm5803_emul_get_ir_comp(SM5803_EMUL), 0x2119, "actual IR_COMP value was %#x", sm5803_emul_get_ir_comp(SM5803_EMUL)); @@ -789,8 +795,9 @@ ZTEST(sm5803, test_vsys_compensation) /* Communication errors bubble up */ i2c_common_emul_set_read_fail_reg(sm5803_emul_get_i2c_chg(SM5803_EMUL), SM5803_REG_IR_COMP1); - zassert_not_equal( - sm5803_drv.set_vsys_compensation(CHARGER_NUM, &ocpc, 0, 0), 0); + zassert_not_equal(sm5803_drv.set_vsys_compensation(CHARGER_NUM, &ocpc, + 0, 0), + EC_ERROR_UNIMPLEMENTED); } ZTEST(sm5803, test_vbus_sink_enable) |