summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTristan Honscheid <honscheid@google.com>2021-11-24 12:33:30 -0700
committerCommit Bot <commit-bot@chromium.org>2021-12-08 18:51:48 +0000
commit94e68168484f58e3c0deb0c1aec52e561ff9b65d (patch)
tree39171344f8920f8037b3c6ae7a19adb47f3fe32b
parentff99f9407aca97ca1c4e6055552f25817205598d (diff)
downloadchrome-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.c9
-rw-r--r--zephyr/test/drivers/src/lis2dw12.c36
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);
}