diff options
author | Jean-Baptiste Maneyrol <jmaneyrol@invensense.com> | 2021-02-08 15:28:42 +0000 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2021-09-27 05:29:29 +0000 |
commit | 9a08037006df4c9cdcd595463c8b3b85406d6137 (patch) | |
tree | 9017b805188607619f1175b5f252d8d71ccc0bba | |
parent | 281402b2ae9bb5c3537e66e470cbe5849eee13e9 (diff) | |
download | chrome-ec-9a08037006df4c9cdcd595463c8b3b85406d6137.tar.gz |
driver: icm426xx: change accel oscillator to RC clock
When using accel low-power with WakeUp oscillator, turning gyro
on switch directly to PLL mode and provokes glitch on ODR.
Use RC clock oscillator for accel low-power to avoid this glitch.
BUG=chromium:1175757
BRANCH=hatch,nami,kukui,dedede,grunt,zork,octopus,volteer
TEST=turn gyro on when accel is running using cros-ec iio devices
and check that odr stays consistent.
Signed-off-by: Jean-Baptiste Maneyrol <jmaneyrol@invensense.com>
Change-Id: I51435eb9533a1fa16bf695e468854156c16d3296
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2679700
Reviewed-by: Gwendal Grignou <gwendal@chromium.org>
Commit-Queue: Gwendal Grignou <gwendal@chromium.org>
Tested-by: Gwendal Grignou <gwendal@chromium.org>
(cherry picked from commit ae50227d0d5b9c135e474bbfd3bb8cce6efef71f)
Signed-off-by: Gwendal Grignou <gwendal@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3128755
Reviewed-by: JuHyun Kim <jkim@invensense.com>
Reviewed-by: Zhuohao Lee <zhuohao@chromium.org>
Tested-by: JuHyun Kim <jkim@invensense.com>
Commit-Queue: Zhuohao Lee <zhuohao@chromium.org>
-rw-r--r-- | driver/accelgyro_icm426xx.c | 9 | ||||
-rw-r--r-- | driver/accelgyro_icm426xx.h | 3 |
2 files changed, 11 insertions, 1 deletions
diff --git a/driver/accelgyro_icm426xx.c b/driver/accelgyro_icm426xx.c index 409916d42f..411ad86a14 100644 --- a/driver/accelgyro_icm426xx.c +++ b/driver/accelgyro_icm426xx.c @@ -803,7 +803,14 @@ static int icm426xx_init_config(const struct motion_sensor_t *s) val |= ICM426XX_UI_SIFS_CFG_SPI_DIS; #endif - return icm_field_update8(s, ICM426XX_REG_INTF_CONFIG0, mask, val); + ret = icm_field_update8(s, ICM426XX_REG_INTF_CONFIG0, mask, val); + if (ret) + return ret; + + /* set accel oscillator to RC clock to avoid bad transition with PLL */ + return icm_field_update8(s, ICM426XX_REG_INTF_CONFIG1, + ICM426XX_ACCEL_LP_CLK_SEL, + ICM426XX_ACCEL_LP_CLK_SEL); } static int icm426xx_init(const struct motion_sensor_t *s) diff --git a/driver/accelgyro_icm426xx.h b/driver/accelgyro_icm426xx.h index d20fd97e57..90f75184ec 100644 --- a/driver/accelgyro_icm426xx.h +++ b/driver/accelgyro_icm426xx.h @@ -136,6 +136,9 @@ enum icm426xx_slew_rate { #define ICM426XX_UI_SIFS_CFG_SPI_DIS 0x02 #define ICM426XX_UI_SIFS_CFG_I2C_DIS 0x03 +#define ICM426XX_REG_INTF_CONFIG1 0x004D +#define ICM426XX_ACCEL_LP_CLK_SEL BIT(3) + enum icm426xx_sensor_mode { ICM426XX_MODE_OFF, ICM426XX_MODE_STANDBY, |