summaryrefslogtreecommitdiff
path: root/driver
diff options
context:
space:
mode:
authorGwendal Grignou <gwendal@chromium.org>2019-04-25 16:59:28 -0700
committerCommit Bot <commit-bot@chromium.org>2019-08-02 17:47:47 +0000
commite77a5b00a40e6c43a4f04346cb5128f7055d1d50 (patch)
tree5e3be35b0e4428cb86aadc47973a9186f533e0e3 /driver
parenta293cbf89925ea5ee0212e766e030cd11fba9561 (diff)
downloadchrome-ec-e77a5b00a40e6c43a4f04346cb5128f7055d1d50.tar.gz
driver: bmi160: Check enable_fifo flags before processing FIFO
If there is an interrupt pending after we suspend the BMI160, we will try to collect length from the FIFO, but the FIFO is suspended. Bring back enable_fifo flags check before processing the FIFO. It has been move after gathering the length in CL:1128555 BUG=b:127321764,b:131272795 BRANCH=master TEST=Using flip_flop.sh script at b/131272795#comment2 Check the messages "unexpected empty FIFO" disappear. Change-Id: Iaab1a7f3607b902acd92b75c926365d7eb09fd5e Signed-off-by: Gwendal Grignou <gwendal@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1585420 Reviewed-by: Enrico Granata <egranata@chromium.org> (cherry picked from commit d17cd2add14f1f1e32bd58d51d60a2c93f17f055) Reviewed-on: https://chromium-review.googlesource.com/1585471 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1719554 Reviewed-by: Edward Hill <ecgh@chromium.org> Tested-by: Edward Hill <ecgh@chromium.org> Commit-Queue: Edward Hill <ecgh@chromium.org>
Diffstat (limited to 'driver')
-rw-r--r--driver/accelgyro_bmi160.c26
1 files changed, 13 insertions, 13 deletions
diff --git a/driver/accelgyro_bmi160.c b/driver/accelgyro_bmi160.c
index b2a59cb17c..2da5688d98 100644
--- a/driver/accelgyro_bmi160.c
+++ b/driver/accelgyro_bmi160.c
@@ -880,6 +880,19 @@ static int load_fifo(struct motion_sensor_t *s, uint32_t last_ts)
if (s->type != MOTIONSENSE_TYPE_ACCEL)
return EC_SUCCESS;
+ if (!(data->flags &
+ (BMI160_FIFO_ALL_MASK << BMI160_FIFO_FLAG_OFFSET))) {
+ /*
+ * The FIFO was disabled while we were processing it.
+ *
+ * Flush potential left over:
+ * When sensor is resumed, we won't read old data.
+ */
+ raw_write8(s->port, s->addr, BMI160_CMD_REG,
+ BMI160_CMD_FIFO_FLUSH);
+ return EC_SUCCESS;
+ }
+
raw_read_n(s->port, s->addr, BMI160_FIFO_LENGTH_0,
(uint8_t *)&length, sizeof(length));
length &= BMI160_FIFO_LENGTH_MASK;
@@ -900,19 +913,6 @@ static int load_fifo(struct motion_sensor_t *s, uint32_t last_ts)
CPRINTS("unexpected large FIFO: %d", length);
length = MIN(length, sizeof(bmi160_buffer));
- if (!(data->flags &
- (BMI160_FIFO_ALL_MASK << BMI160_FIFO_FLAG_OFFSET))) {
- /*
- * The FIFO was disabled while we were processing it.
- *
- * Flush potential left over:
- * When sensor is resumed, we won't read old data.
- */
- raw_write8(s->port, s->addr, BMI160_CMD_REG,
- BMI160_CMD_FIFO_FLUSH);
- return EC_SUCCESS;
- }
-
raw_read_n(s->port, s->addr, BMI160_FIFO_DATA, bmi160_buffer,
length);