diff options
author | Tristan Honscheid <honscheid@google.com> | 2021-11-24 12:33:30 -0700 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2021-12-08 18:51:48 +0000 |
commit | 94e68168484f58e3c0deb0c1aec52e561ff9b65d (patch) | |
tree | 39171344f8920f8037b3c6ae7a19adb47f3fe32b | |
parent | ff99f9407aca97ca1c4e6055552f25817205598d (diff) | |
download | chrome-ec-94e68168484f58e3c0deb0c1aec52e561ff9b65d.tar.gz |
zephyr: lis2dw12: Test set_range function
Add a test for the set_range function. There's a possible bug in this
function that is documented in b:207691864
BRANCH=None
BUG=b:200046770
TEST=zmake -D configure --test test-drivers; make runhosttests
Signed-off-by: Tristan Honscheid <honscheid@google.com>
Change-Id: If11144b74307ef62ef4149fb8e6401f0bdb1f8c8
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3311180
Reviewed-by: Keith Short <keithshort@chromium.org>
-rw-r--r-- | zephyr/emul/emul_lis2dw12.c | 9 | ||||
-rw-r--r-- | zephyr/test/drivers/src/lis2dw12.c | 36 |
2 files changed, 44 insertions, 1 deletions
diff --git a/zephyr/emul/emul_lis2dw12.c b/zephyr/emul/emul_lis2dw12.c index 53c3a8d951..2cc1a25622 100644 --- a/zephyr/emul/emul_lis2dw12.c +++ b/zephyr/emul/emul_lis2dw12.c @@ -33,6 +33,8 @@ struct lis2dw12_emul_data { uint8_t ctrl1_reg; /** Emulated ctrl2 register */ uint8_t ctrl2_reg; + /** Emulated ctrl6 register */ + uint8_t ctrl6_reg; /** Soft reset count */ uint32_t soft_reset_count; }; @@ -97,6 +99,10 @@ static int lis2dw12_emul_read_byte(struct i2c_emul *emul, int reg, uint8_t *val, __ASSERT_NO_MSG(bytes == 0); *val = data->ctrl2_reg; break; + case LIS2DW12_CTRL6_ADDR: + __ASSERT_NO_MSG(bytes == 0); + *val = data->ctrl6_reg; + break; default: __ASSERT(false, "No read handler for register 0x%02x", reg); return -EINVAL; @@ -124,6 +130,9 @@ static int lis2dw12_emul_write_byte(struct i2c_emul *emul, int reg, uint8_t val, } data->ctrl2_reg = val & ~LIS2DW12_SOFT_RESET_MASK; break; + case LIS2DW12_CTRL6_ADDR: + data->ctrl6_reg = val; + break; default: __ASSERT(false, "No write handler for register 0x%02x", reg); return -EINVAL; diff --git a/zephyr/test/drivers/src/lis2dw12.c b/zephyr/test/drivers/src/lis2dw12.c index c6117e2191..e37d962a9a 100644 --- a/zephyr/test/drivers/src/lis2dw12.c +++ b/zephyr/test/drivers/src/lis2dw12.c @@ -17,6 +17,12 @@ static void lis2dw12_setup(void) { lis2dw12_emul_reset(emul_get_binding(EMUL_LABEL)); + + /* Reset certain sensor struct values */ + struct motion_sensor_t *ms = &motion_sensors[LIS2DW12_SENSOR_ID]; + + ms->current_range = 0; + } static void test_lis2dw12_init__fail_read_who_am_i(void) @@ -123,6 +129,30 @@ static void test_lis2dw12_set_power_mode(void) EC_ERROR_INVAL, rv); } +static void test_lis2dw12_set_range(void) +{ + const struct emul *emul = emul_get_binding(EMUL_LABEL); + struct motion_sensor_t *ms = &motion_sensors[LIS2DW12_SENSOR_ID]; + int rv; + + /* Part 1: Happy path. Go above the max range; it will be automatically + * clamped. + */ + + rv = ms->drv->set_range(ms, LIS2DW12_ACCEL_FS_MAX_VAL + 1, 0); + zassert_equal(rv, EC_SUCCESS, "Expected %d but got %d", EC_SUCCESS, rv); + zassert_equal(ms->current_range, LIS2DW12_ACCEL_FS_MAX_VAL, + "Expected %d but got %d", LIS2DW12_ACCEL_FS_MAX_VAL, + ms->current_range); + + /* Part 2: Error accessing register */ + i2c_common_emul_set_read_fail_reg(lis2dw12_emul_to_i2c_emul(emul), + LIS2DW12_FS_ADDR); + rv = ms->drv->set_range(ms, LIS2DW12_ACCEL_FS_MAX_VAL, 0); + zassert_equal(rv, EC_ERROR_INVAL, "Expected %d but got %d", + EC_ERROR_INVAL, rv); +} + void test_suite_lis2dw12(void) { ztest_test_suite(lis2dw12, @@ -143,6 +173,10 @@ void test_suite_lis2dw12(void) lis2dw12_setup, lis2dw12_setup), ztest_unit_test_setup_teardown( test_lis2dw12_set_power_mode, - lis2dw12_setup, lis2dw12_setup)); + lis2dw12_setup, lis2dw12_setup), + ztest_unit_test_setup_teardown( + test_lis2dw12_set_range, + lis2dw12_setup, lis2dw12_setup) + ); ztest_run_test_suite(lis2dw12); } |