diff options
author | Karthikeyan Ramasubramanian <kramasub@chromium.org> | 2019-02-11 13:55:45 -0700 |
---|---|---|
committer | ChromeOS Commit Bot <chromeos-commit-bot@chromium.org> | 2019-02-13 16:00:44 +0000 |
commit | b5791d24e3799eae171aefe948c43a7f9351c38b (patch) | |
tree | 61e2a156bc5dc9a808abe172e24d80d1379b8e2c | |
parent | 4c51a16dac8122bee87200d5a928ba0d067da2eb (diff) | |
download | chrome-ec-b5791d24e3799eae171aefe948c43a7f9351c38b.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>
(cherry picked from commit 7a4e638e358dcdf232e306e405cff51a6bb4f6ae)
Reviewed-on: https://chromium-review.googlesource.com/c/1470611
Reviewed-by: Karthikeyan Ramasubramanian <kramasub@chromium.org>
Commit-Queue: Karthikeyan Ramasubramanian <kramasub@chromium.org>
Trybot-Ready: Karthikeyan Ramasubramanian <kramasub@chromium.org>
-rw-r--r-- | driver/accelgyro_lsm6dsm.c | 15 |
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 |