summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Marheine <pmarheine@chromium.org>2023-05-04 13:07:16 +1000
committerChromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com>2023-05-05 01:35:32 +0000
commitd814285d6f6fc36ddc948ed9d65b451bcd0e2b21 (patch)
tree5936fd3a46ed8ea53a0c1c19817451002c8b911e
parent21a314ea7aad34fc7930ea207d07c6b1eb34b7c9 (diff)
downloadchrome-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.c2
-rw-r--r--include/charger.h4
-rw-r--r--zephyr/test/drivers/sm5803/src/sm5803.c17
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)