diff options
author | Aaron Massey <aaronmassey@google.com> | 2021-11-01 14:16:19 -0600 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2021-11-02 17:16:06 +0000 |
commit | 522cc120373a330f9652145a6d6084eaac2a1296 (patch) | |
tree | d52b165ccab65c0b1aebdbe71b992bd44aa873d2 | |
parent | b804d54998a128e5dd4e4e78493d3d137428b166 (diff) | |
download | chrome-ec-522cc120373a330f9652145a6d6084eaac2a1296.tar.gz |
zephyr: test: verify ln9310 handles explicit reset
During startup, the ln9310 driver checks the ctrl register for zero
values to detect if a reset has occurred and act accordingly.
Test the driver starts up appropriately after a reset.
BRANCH=none
BUG=b:184856083
TEST=zmake configure --test zephyr/tests/drivers
Signed-off-by: Aaron Massey <aaronmassey@google.com>
Change-Id: Iaef0675eceb981b51fce58952e10332199d5cdf6
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3252925
Reviewed-by: Yuval Peress <peress@google.com>
-rw-r--r-- | zephyr/test/drivers/src/ln9310.c | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/zephyr/test/drivers/src/ln9310.c b/zephyr/test/drivers/src/ln9310.c index a4a3ab3a98..932b998cdb 100644 --- a/zephyr/test/drivers/src/ln9310.c +++ b/zephyr/test/drivers/src/ln9310.c @@ -535,6 +535,57 @@ static void test_ln9310_sys_sts_reg_fail(void) i2c_common_emul_set_read_func(i2c_emul, NULL, NULL); } +struct reg_to_intercept { + int reg; + uint8_t replace_val; +}; + +static int mock_read_interceptor(struct i2c_emul *emul, int reg, uint8_t *val, + int bytes, void *data) +{ + struct reg_to_intercept *test_data = data; + + if (test_data->reg == reg) + return test_data->replace_val; + + return 1; +} + +static void test_ln9310_reset_explicit_detected_startup(void) +{ + const struct emul *emulator = + emul_get_binding(DT_LABEL(DT_NODELABEL(ln9310))); + struct i2c_emul *i2c_emul = ln9310_emul_get_i2c_emul(emulator); + struct reg_to_intercept test_data = { + .reg = LN9310_REG_LION_CTRL, + .replace_val = 0, + }; + + zassert_not_null(emulator, NULL); + zassert_not_null(i2c_emul, NULL); + + ln9310_emul_set_context(emulator); + ln9310_emul_reset(emulator); + /* Battery and chip rev won't matter here so only testing one pair */ + ln9310_emul_set_battery_cell_type(emulator, BATTERY_CELL_TYPE_2S); + ln9310_emul_set_version(emulator, LN9310_BC_STS_C_CHIP_REV_FIXED); + + zassert_ok(ln9310_init(), NULL); + zassert_true(ln9310_emul_is_init(emulator), NULL); + + i2c_common_emul_set_read_func(i2c_emul, &mock_read_interceptor, + &test_data); + + ln9310_software_enable(true); + + /* TODO(b/201420132) */ + k_msleep(TEST_DELAY_MS); + + zassert_true(ln9310_power_good(), NULL); + + i2c_common_emul_set_read_func(i2c_emul, NULL, NULL); +} + static void reset_ln9310_state(void) { ln9310_reset_to_initial_state(); @@ -546,6 +597,10 @@ void test_suite_ln9310(void) ztest_test_suite( ln9310, ztest_unit_test_setup_teardown( + test_ln9310_reset_explicit_detected_startup, + reset_ln9310_state, + reset_ln9310_state), + ztest_unit_test_setup_teardown( test_ln9310_sys_sts_reg_fail, reset_ln9310_state, reset_ln9310_state), |