summaryrefslogtreecommitdiff
path: root/driver/accelgyro_lsm6dsm.c
diff options
context:
space:
mode:
authorKarthikeyan Ramasubramanian <kramasub@chromium.org>2019-02-11 13:55:45 -0700
committerchrome-bot <chrome-bot@chromium.org>2019-02-12 18:22:12 -0800
commit7a4e638e358dcdf232e306e405cff51a6bb4f6ae (patch)
treefcb8d329907ef950571a98b1652679f5e3fe2e8d /driver/accelgyro_lsm6dsm.c
parent1f883987e9d71223058d7cb8771607977f3688d5 (diff)
downloadchrome-ec-7a4e638e358dcdf232e306e405cff51a6bb4f6ae.tar.gz
driver/lsm6dsm: Fix issue while setting Magnetometer ODR
While setting magnetometer ODR, accel ODR is restored through recursive means. This causes the FIFO to be enabled as part of setting the accel ODR while the magnetometer ODR is still to be configured. Fix the issue by restoring the accel ODR in fifo_enable function instead of recursively setting the accel ODR. BUG=b:115587004 BRANCH=octopus TEST=Boot to ChromeOS. Read the magnetometer samples using ectool. Change-Id: I1c7b679b62c95277725c894242fa0e403d8cd37f Signed-off-by: Karthikeyan Ramasubramanian <kramasub@google.com> Reviewed-on: https://chromium-review.googlesource.com/1464380 Commit-Ready: Karthikeyan Ramasubramanian <kramasub@chromium.org> Tested-by: Karthikeyan Ramasubramanian <kramasub@chromium.org> Reviewed-by: Gwendal Grignou <gwendal@google.com> Reviewed-by: Justin TerAvest <teravest@chromium.org>
Diffstat (limited to 'driver/accelgyro_lsm6dsm.c')
-rw-r--r--driver/accelgyro_lsm6dsm.c15
1 files changed, 4 insertions, 11 deletions
diff --git a/driver/accelgyro_lsm6dsm.c b/driver/accelgyro_lsm6dsm.c
index 49c36d8ec5..9e333c95f2 100644
--- a/driver/accelgyro_lsm6dsm.c
+++ b/driver/accelgyro_lsm6dsm.c
@@ -175,6 +175,10 @@ static int fifo_enable(const struct motion_sensor_t *accel)
st_write_data_with_mask(accel, LSM6DSM_ODR_REG(accel->type),
LSM6DSM_ODR_MASK,
LSM6DSM_ODR_TO_REG(max_odr));
+ } else {
+ st_write_data_with_mask(accel, LSM6DSM_ODR_REG(accel->type),
+ LSM6DSM_ODR_MASK,
+ LSM6DSM_ODR_TO_REG(odrs[FIFO_DEV_ACCEL]));
}
#endif /* CONFIG_MAG_LSM6DSM_LIS2MDL */
/*
@@ -494,17 +498,6 @@ int lsm6dsm_set_data_rate(const struct motion_sensor_t *s, int rate, int rnd)
if (s->type == MOTIONSENSE_TYPE_MAG) {
struct mag_cal_t *cal = LIS2MDL_CAL(s);
-#ifdef CONFIG_ACCEL_FIFO
- /*
- * Accelormeter rate may have been changed when setting the
- * FIFO.
- * Put back correct rate if rate of magnetometer changes.
- */
- data->base.odr = 0;
- accel->drv->set_data_rate(accel,
- accel->drv->get_data_rate(accel), 0);
-#endif
-
init_mag_cal(cal);
/*
* Magnetometer ODR is calculating at 100Hz, but we are reading