From ee5dcc9ae08f0fafced7f2b54720928cbe273b2b Mon Sep 17 00:00:00 2001 From: Dawid Niedzwiecki Date: Wed, 6 Jul 2022 09:27:55 +0200 Subject: zephyr: tests: fix bmi160 flaky tests Add before and after test routines to initialize the bmi160 emulator properly. It includes: -reenabling sensors -setting a correct chip ID -disabling a rotation vector -clearing the I2C fail register It should fix every flaky bmi160 test. BUG=b:233104376 TEST=enable the test shuffling; make sure there is no "bmi160.c" string in the output BRANCH=main Signed-off-by: Dawid Niedzwiecki Change-Id: I6769f91e10b147a0c28730469c85cda8f128931f Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3748784 Reviewed-by: Tomasz Michalec Commit-Queue: Yuval Peress Reviewed-by: Yuval Peress --- zephyr/test/drivers/src/bmi160.c | 38 +++++++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) (limited to 'zephyr/test/drivers') diff --git a/zephyr/test/drivers/src/bmi160.c b/zephyr/test/drivers/src/bmi160.c index 473858f5ea..39144bd9e6 100644 --- a/zephyr/test/drivers/src/bmi160.c +++ b/zephyr/test/drivers/src/bmi160.c @@ -2080,4 +2080,40 @@ ZTEST_USER(bmi160, test_bmi_init_chip_id) i2c_common_emul_set_write_func(emul, NULL, NULL); } -ZTEST_SUITE(bmi160, drivers_predicate_post_main, NULL, NULL, NULL, NULL); +static void bmi160_before(void *fixture) +{ + ARG_UNUSED(fixture); + struct i2c_emul *emul = bmi_emul_get(BMI_ORD); + struct motion_sensor_t *acc_ms; + struct motion_sensor_t *gyr_ms; + + acc_ms = &motion_sensors[BMI_ACC_SENSOR_ID]; + gyr_ms = &motion_sensors[BMI_GYR_SENSOR_ID]; + + i2c_common_emul_set_read_fail_reg(emul, I2C_COMMON_EMUL_NO_FAIL_REG); + bmi_emul_set_reg(emul, BMI160_CHIP_ID, 0xd1); + + /* Disable rotation */ + gyr_ms->rot_standard_ref = NULL; + acc_ms->rot_standard_ref = NULL; + + zassume_equal(EC_SUCCESS, acc_ms->drv->set_data_rate(acc_ms, 50000, 0), + NULL); + zassume_equal(EC_SUCCESS, gyr_ms->drv->set_data_rate(gyr_ms, 50000, 0), + NULL); +} + +static void bmi160_after(void *state) +{ + ARG_UNUSED(state); + struct motion_sensor_t *acc_ms, *gyr_ms; + + acc_ms = &motion_sensors[BMI_ACC_SENSOR_ID]; + gyr_ms = &motion_sensors[BMI_GYR_SENSOR_ID]; + + acc_ms->drv->set_data_rate(acc_ms, 0, 0); + gyr_ms->drv->set_data_rate(gyr_ms, 0, 0); +} + +ZTEST_SUITE(bmi160, drivers_predicate_post_main, NULL, bmi160_before, + bmi160_after, NULL); -- cgit v1.2.1