summaryrefslogtreecommitdiff
path: root/driver/accelgyro_bmi_common.h
diff options
context:
space:
mode:
authorChing-Kang Yen <chingkang@chromium.org>2020-03-31 19:37:17 +0800
committerChing-Kang Yen <chingkang@chromium.org>2020-04-23 17:30:41 +0000
commit00b4226613aa84f9734a22e50acd4d7ede960cc1 (patch)
tree93934e49b0d533489df3eb3bdc0475807e6c0206 /driver/accelgyro_bmi_common.h
parent557dafbacbc61cd4c5dec9f27ead4ea17b67aac6 (diff)
downloadchrome-ec-00b4226613aa84f9734a22e50acd4d7ede960cc1.tar.gz
driver: Add BMI260 basic driver support
Add BMI260 accel/gyro driver code. Be able to do initial configuration, start up sensor, config interrupt and fifo, perform calibration, and access the sensor data from AP. BRANCH=None BUG=b:146144827 TEST=make -j4 BOARD=volteer \ && flash_ec --image build/volteer/ec.bin --board volteer Then, check sensor data is available on DUT by "ectool motionsense". TEST=make buildall -j TEST=tast run ${IP} hardware.SensorRing Cq-Depend: chromium:2148802 Change-Id: I5124ee8359a74f98cfe8d26da640325f5e00cb15 Signed-off-by: Ching-Kang Yen <chingkang@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2086534 Reviewed-by: Gwendal Grignou <gwendal@chromium.org>
Diffstat (limited to 'driver/accelgyro_bmi_common.h')
-rw-r--r--driver/accelgyro_bmi_common.h50
1 files changed, 33 insertions, 17 deletions
diff --git a/driver/accelgyro_bmi_common.h b/driver/accelgyro_bmi_common.h
index cf7f0d06cb..583d43b04d 100644
--- a/driver/accelgyro_bmi_common.h
+++ b/driver/accelgyro_bmi_common.h
@@ -9,6 +9,7 @@
#include "accelgyro.h"
#include "driver/accelgyro_bmi160.h"
+#include "driver/accelgyro_bmi260.h"
#include "mag_bmm150.h"
#define BMI_CONF_REG(_sensor) (0x40 + 2 * (_sensor))
@@ -99,39 +100,54 @@ struct bmi_drv_data_t {
BMI_GET_DATA(_sensor)->orientation)
#endif
-#define BMI_ACC_DATA BMI160_ACC_X_L_G
-#define BMI_GYR_DATA BMI160_GYR_X_L_G
-#define BMI_AUX_DATA BMI160_MAG_X_L_G
-
-#define BMI_FIFO_CONFIG_0 BMI160_FIFO_CONFIG_0
-#define BMI_FIFO_CONFIG_1 BMI160_FIFO_CONFIG_1
-#define BMI_FIFO_SENSOR_EN(_sensor) BMI160_FIFO_SENSOR_EN(_sensor)
-
-#define BMI_TEMPERATURE_0 BMI160_TEMPERATURE_0
+#define BMI_ACC_DATA(v) (BMI160_ACC_X_L_G + \
+ (v) * (BMI260_ACC_X_L_G - BMI160_ACC_X_L_G))
+#define BMI_GYR_DATA(v) (BMI160_GYR_X_L_G + \
+ (v) * (BMI260_GYR_X_L_G - BMI160_GYR_X_L_G))
+#define BMI_AUX_DATA(v) (BMI160_MAG_X_L_G + \
+ (v) * (BMI260_AUX_X_L_G - BMI160_MAG_X_L_G))
+
+#define BMI_FIFO_CONFIG_0(v) (BMI160_FIFO_CONFIG_0 + \
+ (v) * (BMI260_FIFO_CONFIG_0 - BMI160_FIFO_CONFIG_0))
+#define BMI_FIFO_CONFIG_1(v) (BMI160_FIFO_CONFIG_1 + \
+ (v) * (BMI260_FIFO_CONFIG_1 - BMI160_FIFO_CONFIG_1))
+#define BMI_FIFO_SENSOR_EN(v, _sensor) (BMI160_FIFO_SENSOR_EN(_sensor) + \
+ (v) * (BMI260_FIFO_SENSOR_EN(_sensor) - BMI160_FIFO_SENSOR_EN(_sensor)))
+
+#define BMI_TEMPERATURE_0(v) (BMI160_TEMPERATURE_0 + \
+ (v) * (BMI260_TEMPERATURE_0 - BMI160_TEMPERATURE_0))
#define BMI_INVALID_TEMP 0x8000
-#define BMI_STATUS BMI160_STATUS
+#define BMI_STATUS(v) (BMI160_STATUS + \
+ (v) * (BMI260_STATUS - BMI160_STATUS))
#define BMI_DRDY_OFF(_sensor) (7 - (_sensor))
#define BMI_DRDY_MASK(_sensor) (1 << BMI160_DRDY_OFF(_sensor))
-#define BMI_OFFSET_ACC70 BMI160_OFFSET_ACC70
-#define BMI_OFFSET_GYR70 BMI160_OFFSET_GYR70
+#define BMI_OFFSET_ACC70(v) (BMI160_OFFSET_ACC70 + \
+ (v) * (BMI260_OFFSET_ACC70 - BMI160_OFFSET_ACC70))
+#define BMI_OFFSET_GYR70(v) (BMI160_OFFSET_GYR70 + \
+ (v) * (BMI260_OFFSET_GYR70 - BMI160_OFFSET_GYR70))
/*
* There is some bits in this register that differ between BMI160 and BMI260
* Only use this macro for gyro offset 9:8 (BMI_OFFSET_EN_GYR98 5:0).
*/
-#define BMI_OFFSET_EN_GYR98 BMI160_OFFSET_EN_GYR98
+#define BMI_OFFSET_EN_GYR98(v) (BMI160_OFFSET_EN_GYR98 + \
+ (v) * (BMI260_OFFSET_EN_GYR98 - BMI160_OFFSET_EN_GYR98))
#define BMI_OFFSET_GYR98_MASK (BIT(6) - 1)
#define BMI_OFFSET_ACC_MULTI_MG (3900 * 1024)
#define BMI_OFFSET_ACC_DIV_MG 1000000
#define BMI_OFFSET_GYRO_MULTI_MDS (61 * 1024)
#define BMI_OFFSET_GYRO_DIV_MDS 1000
-#define BMI_FIFO_LENGTH_0 BMI160_FIFO_LENGTH_0
-#define BMI_FIFO_LENGTH_MASK BMI160_FIFO_LENGTH_MASK
-#define BMI_FIFO_DATA BMI160_FIFO_DATA
+#define BMI_FIFO_LENGTH_0(v) (BMI160_FIFO_LENGTH_0 + \
+ (v) * (BMI260_FIFO_LENGTH_0 - BMI160_FIFO_LENGTH_0))
+#define BMI_FIFO_LENGTH_MASK(v) (BMI160_FIFO_LENGTH_MASK + \
+ (v) * (BMI260_FIFO_LENGTH_MASK - BMI160_FIFO_LENGTH_MASK))
+#define BMI_FIFO_DATA(v) (BMI160_FIFO_DATA + \
+ (v) * (BMI260_FIFO_DATA - BMI160_FIFO_DATA))
-#define BMI_CMD_REG BMI160_CMD_REG
+#define BMI_CMD_REG(v) (BMI160_CMD_REG + \
+ (v) * (BMI260_CMD_REG - BMI160_CMD_REG))
#define BMI_CMD_FIFO_FLUSH 0xb0