mirror of https://gitee.com/openkylin/linux.git
iio: imu: inv_mpu6050: better fifo overflow handling
Use fifo overflow bit from int status rather than using an arbitrary threshold. Signed-off-by: Jean-Baptiste Maneyrol <jmaneyrol@invensense.com> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
This commit is contained in:
parent
5cba7caaac
commit
f5057e7b2d
|
@ -166,6 +166,7 @@ struct inv_mpu6050_state {
|
|||
#define INV_MPU6050_REG_RAW_GYRO 0x43
|
||||
|
||||
#define INV_MPU6050_REG_INT_STATUS 0x3A
|
||||
#define INV_MPU6050_BIT_FIFO_OVERFLOW_INT 0x10
|
||||
#define INV_MPU6050_BIT_RAW_DATA_RDY_INT 0x01
|
||||
|
||||
#define INV_MPU6050_REG_USER_CTRL 0x6A
|
||||
|
@ -190,7 +191,6 @@ struct inv_mpu6050_state {
|
|||
|
||||
#define INV_MPU6050_BYTES_PER_3AXIS_SENSOR 6
|
||||
#define INV_MPU6050_FIFO_COUNT_BYTE 2
|
||||
#define INV_MPU6050_FIFO_THRESHOLD 500
|
||||
|
||||
/* mpu6500 registers */
|
||||
#define INV_MPU6500_REG_ACCEL_CONFIG_2 0x1D
|
||||
|
|
|
@ -110,6 +110,9 @@ irqreturn_t inv_mpu6050_read_fifo(int irq, void *p)
|
|||
"failed to ack interrupt\n");
|
||||
goto flush_fifo;
|
||||
}
|
||||
/* handle fifo overflow by reseting fifo */
|
||||
if (int_status & INV_MPU6050_BIT_FIFO_OVERFLOW_INT)
|
||||
goto flush_fifo;
|
||||
if (!(int_status & INV_MPU6050_BIT_RAW_DATA_RDY_INT)) {
|
||||
dev_warn(regmap_get_device(st->map),
|
||||
"spurious interrupt with status 0x%x\n", int_status);
|
||||
|
@ -135,8 +138,6 @@ irqreturn_t inv_mpu6050_read_fifo(int irq, void *p)
|
|||
if (result)
|
||||
goto end_session;
|
||||
fifo_count = get_unaligned_be16(&data[0]);
|
||||
if (fifo_count > INV_MPU6050_FIFO_THRESHOLD)
|
||||
goto flush_fifo;
|
||||
/* compute and process all complete datum */
|
||||
nb = fifo_count / bytes_per_datum;
|
||||
for (i = 0; i < nb; ++i) {
|
||||
|
|
Loading…
Reference in New Issue