From 8fa63762fbe0bf9f2e9a2211217eb239b494c80b Mon Sep 17 00:00:00 2001 From: Gwendal Grignou Date: Sat, 25 Jul 2015 00:08:14 -0700 Subject: driver: bmi160: Fix bugs found testing SPI SPI being much faster, need to add right sleep to wait for sensor to change state from suspend. Set the ODR before the range, an issue I did not have with i2c. Fix test used when FIFO is disabled. BRANCH=smaug BUG=chrome-os-partner:42304 TEST=Check sensors are coming and rate/range are correctly set. Change-Id: I5bf655626f1f4232478a04d1d4e1a0d443efbf0f Signed-off-by: Gwendal Grignou Reviewed-on: https://chromium-review.googlesource.com/288517 Reviewed-by: Vincent Palatin --- driver/accelgyro_bmi160.h | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) (limited to 'driver/accelgyro_bmi160.h') diff --git a/driver/accelgyro_bmi160.h b/driver/accelgyro_bmi160.h index 3e39e657ff..27df9c2c1f 100644 --- a/driver/accelgyro_bmi160.h +++ b/driver/accelgyro_bmi160.h @@ -24,6 +24,16 @@ #define BMI160_ERR_REG 0x02 #define BMI160_PMU_STATUS 0x03 +#define BMI160_PMU_MAG_OFFSET 0 +#define BMI160_PMU_GYR_OFFSET 2 +#define BMI160_PMU_ACC_OFFSET 4 +#define BMI160_PMU_SENSOR_STATUS(_sensor_type, _val) \ + (((_val) >> (4 - 2 * (_sensor_type))) & 0x3) +#define BMI160_PMU_SUSPEND 0 +#define BMI160_PMU_NORMAL 1 +#define BMI160_PMU_LOW_POWER 2 +#define BMI160_PMU_FAST_STARTUP 3 + #define BMI160_MAG_X_L_G 0x04 #define BMI160_MAG_X_H_G 0x05 #define BMI160_MAG_Y_L_G 0x06 @@ -314,6 +324,7 @@ enum fifo_header { #define BMI160_CMD_SOFT_RESET 0xb6 #define BMI160_CMD_NOOP 0x00 #define BMI160_CMD_START_FOC 0x03 +#define BMI160_CMD_ACC_MODE_OFFSET 0x10 #define BMI160_CMD_ACC_MODE_SUSP 0x10 #define BMI160_CMD_ACC_MODE_NORMAL 0x11 #define BMI160_CMD_ACC_MODE_LOWPOWER 0x12 @@ -323,10 +334,10 @@ enum fifo_header { #define BMI160_CMD_MAG_MODE_SUSP 0x18 #define BMI160_CMD_MAG_MODE_NORMAL 0x19 #define BMI160_CMD_MAG_MODE_LOWPOWER 0x1a -#define BMI160_CMD_MODE_SUSPEND(_sensor) \ - (BMI160_CMD_ACC_MODE_SUSP + 4 * (_sensor)) -#define BMI160_CMD_MODE_NORMAL(_sensor) \ - (BMI160_CMD_ACC_MODE_NORMAL + 4 * (_sensor)) +#define BMI160_CMD_MODE_SUSPEND(_sensor_type) \ + (BMI160_CMD_ACC_MODE_OFFSET | (_sensor_type) << 2 | BMI160_PMU_SUSPEND) +#define BMI160_CMD_MODE_NORMAL(_sensor_type) \ + (BMI160_CMD_ACC_MODE_OFFSET | (_sensor_type) << 2 | BMI160_PMU_NORMAL) #define BMI160_CMD_FIFO_FLUSH 0xb0 #define BMI160_CMD_INT_RESET 0xb1 -- cgit v1.2.1