diff options
author | Jean-Baptiste Maneyrol <jmaneyrol@invensense.com> | 2021-02-08 15:28:42 +0000 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2021-02-25 20:17:49 +0000 |
commit | ae50227d0d5b9c135e474bbfd3bb8cce6efef71f (patch) | |
tree | a10491cdba38a0f747c9c0fb02dcfe1359a13b48 | |
parent | ba264bb932fcfa46378e68c4276d1db01c577ebf (diff) | |
download | chrome-ec-ae50227d0d5b9c135e474bbfd3bb8cce6efef71f.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>
-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 47558beeed..e0be3ae02e 100644 --- a/driver/accelgyro_icm426xx.c +++ b/driver/accelgyro_icm426xx.c @@ -848,7 +848,14 @@ static int icm426xx_init_config(const struct motion_sensor_t *s) #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(struct motion_sensor_t *s) diff --git a/driver/accelgyro_icm426xx.h b/driver/accelgyro_icm426xx.h index 0b4e3aa14a..c281e352b1 100644 --- a/driver/accelgyro_icm426xx.h +++ b/driver/accelgyro_icm426xx.h @@ -137,6 +137,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, |