summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJean-Baptiste Maneyrol <jmaneyrol@invensense.com>2021-02-08 15:28:42 +0000
committerCommit Bot <commit-bot@chromium.org>2021-02-25 20:17:49 +0000
commitae50227d0d5b9c135e474bbfd3bb8cce6efef71f (patch)
treea10491cdba38a0f747c9c0fb02dcfe1359a13b48
parentba264bb932fcfa46378e68c4276d1db01c577ebf (diff)
downloadchrome-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.c9
-rw-r--r--driver/accelgyro_icm426xx.h3
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,