summaryrefslogtreecommitdiff
path: root/driver/accelgyro_bmi160.h
diff options
context:
space:
mode:
authorGwendal Grignou <gwendal@chromium.org>2015-08-30 20:55:40 -0700
committerchrome-bot <chrome-bot@chromium.org>2015-09-21 01:13:54 -0700
commit8139114897c2eab41fd71e66368d861f9e5db2ba (patch)
tree80088b7be806602ecf0f3f337e8f7f70f03a03e2 /driver/accelgyro_bmi160.h
parent1d8fcfcd0d1b93d04ea5adcb980ffac38bd3d140 (diff)
downloadchrome-ec-8139114897c2eab41fd71e66368d861f9e5db2ba.tar.gz
driver: bmi160: Add Significant motion support.
Add support for significant motion. BRANCH=smaug BUG=b:23570481 TEST=On Ryu, check significant motion (not still) is detected. Change-Id: I5760a1ba3624490a0297de82371b1d15f05df5dc Signed-off-by: Gwendal Grignou <gwendal@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/296214
Diffstat (limited to 'driver/accelgyro_bmi160.h')
-rw-r--r--driver/accelgyro_bmi160.h22
1 files changed, 22 insertions, 0 deletions
diff --git a/driver/accelgyro_bmi160.h b/driver/accelgyro_bmi160.h
index 0d6103a14c..ee44f9262e 100644
--- a/driver/accelgyro_bmi160.h
+++ b/driver/accelgyro_bmi160.h
@@ -296,8 +296,28 @@ enum fifo_header {
#define BMI160_INT_MOTION_0 0x5f
#define BMI160_INT_MOTION_1 0x60
+/*
+ * The formula is defined in 2.11.25 (any motion interrupt [1]).
+ *
+ * if we want threshold at a (in mg), the register should be x, where
+ * x * 7.81mg = a, assuming a range of 4G, which is
+ * x * 4 * 1.953 = a so
+ * x = a * 1000 / range * 1953
+ */
+#define BMI160_MOTION_TH(_s, _mg) \
+ (MIN(((_mg) * 1000) / ((_s)->drv->get_range(_s) * 1953), 0xff))
#define BMI160_INT_MOTION_2 0x61
#define BMI160_INT_MOTION_3 0x62
+#define BMI160_MOTION_NO_MOT_SEL (1 << 0)
+#define BMI160_MOTION_SIG_MOT_SEL (1 << 1)
+#define BMI160_MOTION_SKIP_OFF 2
+#define BMI160_MOTION_SKIP_MASK 0x3
+#define BMI160_MOTION_SKIP_TIME(_ms) \
+ (MIN(__fls((_ms) / 1500), BMI160_MOTION_SKIP_MASK))
+#define BMI160_MOTION_PROOF_OFF 4
+#define BMI160_MOTION_PROOF_MASK 0x3
+#define BMI160_MOTION_PROOF_TIME(_ms) \
+ (MIN(__fls((_ms) / 250), BMI160_MOTION_PROOF_MASK))
#define BMI160_INT_TAP_0 0x63
#define BMI160_INT_TAP_1 0x64
@@ -409,6 +429,8 @@ enum bmi160_running_mode {
struct bmi160_drv_data_t {
struct accelgyro_saved_data_t saved_data[3];
uint8_t flags;
+ uint8_t enabled_activities;
+ uint8_t disabled_activities;
#ifdef CONFIG_MAG_BMI160_BMM150
struct bmm150_comp_registers comp_regs;
#endif