summaryrefslogtreecommitdiff
path: root/zephyr
diff options
context:
space:
mode:
authorYuval Peress <peress@chromium.org>2021-09-18 10:54:16 -0600
committerCommit Bot <commit-bot@chromium.org>2021-09-21 02:41:35 +0000
commit773a0ca0b7d2d7d9aad543e2c894fd4cf363d3cd (patch)
treef3d4664c41e2849a70148004f48bcfa118050cb0 /zephyr
parent558b809aae30c8e8e72492bc11831ce0f9aa9d24 (diff)
downloadchrome-ec-773a0ca0b7d2d7d9aad543e2c894fd4cf363d3cd.tar.gz
zephyr: test: Test failed write on soft reset register (lis2dw12)
Test the init code path that fails writing the soft reset register. BRANCH=none BUG=b:200046770 TEST=zmake configure --test zephyr/test/drivers Signed-off-by: Yuval Peress <peress@chromium.org> Change-Id: Ic395c7dd749c4203800b72afbb024919a71d0eae Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3170535 Commit-Queue: Yuval Peress <peress@google.com> Tested-by: Yuval Peress <peress@google.com> Reviewed-by: Keith Short <keithshort@chromium.org>
Diffstat (limited to 'zephyr')
-rw-r--r--zephyr/emul/emul_lis2dw12.c15
-rw-r--r--zephyr/test/drivers/src/lis2dw12.c15
2 files changed, 30 insertions, 0 deletions
diff --git a/zephyr/emul/emul_lis2dw12.c b/zephyr/emul/emul_lis2dw12.c
index e0ca762a8e..fba6dbe758 100644
--- a/zephyr/emul/emul_lis2dw12.c
+++ b/zephyr/emul/emul_lis2dw12.c
@@ -29,6 +29,8 @@ struct lis2dw12_emul_data {
struct i2c_common_emul_data common;
/** Emulated who-am-i register */
uint8_t who_am_i_reg;
+ /** Emulated ctrl2 register */
+ uint8_t ctrl2_reg;
};
struct lis2dw12_emul_cfg {
@@ -49,7 +51,10 @@ void lis2dw12_emul_reset(const struct emul *emul)
i2c_common_emul_set_read_fail_reg(lis2dw12_emul_to_i2c_emul(emul),
I2C_COMMON_EMUL_NO_FAIL_REG);
+ i2c_common_emul_set_write_fail_reg(lis2dw12_emul_to_i2c_emul(emul),
+ I2C_COMMON_EMUL_NO_FAIL_REG);
data->who_am_i_reg = LIS2DW12_WHO_AM_I;
+ data->ctrl2_reg = 0;
}
void lis2dw12_emul_set_who_am_i(const struct emul *emul, uint8_t who_am_i)
@@ -69,6 +74,10 @@ static int lis2dw12_emul_read_byte(struct i2c_emul *emul, int reg, uint8_t *val,
__ASSERT_NO_MSG(bytes == 0);
*val = data->who_am_i_reg;
break;
+ case LIS2DW12_CTRL2_ADDR:
+ __ASSERT_NO_MSG(bytes == 0);
+ *val = data->ctrl2_reg;
+ break;
default:
return -EINVAL;
}
@@ -78,10 +87,16 @@ static int lis2dw12_emul_read_byte(struct i2c_emul *emul, int reg, uint8_t *val,
static int lis2dw12_emul_write_byte(struct i2c_emul *emul, int reg, uint8_t val,
int bytes)
{
+ struct lis2dw12_emul_data *data = LIS2DW12_DATA_FROM_I2C_EMUL(emul);
+
switch (reg) {
case LIS2DW12_WHO_AM_I_REG:
LOG_ERR("Can't write to who-am-i register");
return -EINVAL;
+ case LIS2DW12_CTRL2_ADDR:
+ __ASSERT_NO_MSG(bytes == 1);
+ data->ctrl2_reg = val;
+ break;
default:
return -EINVAL;
}
diff --git a/zephyr/test/drivers/src/lis2dw12.c b/zephyr/test/drivers/src/lis2dw12.c
index 06009f95a0..0b89ca88b0 100644
--- a/zephyr/test/drivers/src/lis2dw12.c
+++ b/zephyr/test/drivers/src/lis2dw12.c
@@ -45,6 +45,18 @@ static void test_lis2dw12_init__fail_who_am_i(void)
EC_ERROR_ACCESS_DENIED);
}
+static void test_lis2dw12_init__fail_write_soft_reset(void)
+{
+ const struct emul *emul = emul_get_binding(EMUL_LABEL);
+ struct motion_sensor_t *ms = &motion_sensors[LIS2DW12_SENSOR_ID];
+ int rv;
+
+ i2c_common_emul_set_write_fail_reg(lis2dw12_emul_to_i2c_emul(emul),
+ LIS2DW12_SOFT_RESET_ADDR);
+ rv = ms->drv->init(ms);
+ zassert_equal(EC_ERROR_INVAL, rv, NULL);
+}
+
void test_suite_lis2dw12(void)
{
ztest_test_suite(lis2dw12,
@@ -53,6 +65,9 @@ void test_suite_lis2dw12(void)
lis2dw12_setup, unit_test_noop),
ztest_unit_test_setup_teardown(
test_lis2dw12_init__fail_who_am_i,
+ lis2dw12_setup, unit_test_noop),
+ ztest_unit_test_setup_teardown(
+ test_lis2dw12_init__fail_write_soft_reset,
lis2dw12_setup, unit_test_noop));
ztest_run_test_suite(lis2dw12);
}