iio: imu/mpu6050: support dual-edge IRQ
authorMichał Mirosław <mirq-linux@rere.qmqm.pl>
Sat, 11 Jan 2020 15:19:11 +0000 (16:19 +0100)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Sat, 18 Jan 2020 13:31:35 +0000 (13:31 +0000)
Make mpu6050 usable on platforms which provide only any-edge interrupts.
One example of this kind of platform is AT91SAM9G45

Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
Acked-by: Jean-Baptiste Maneyrol <jmaneyrol@invensense.com>
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
drivers/iio/imu/inv_mpu6050/inv_mpu_core.c
drivers/iio/imu/inv_mpu6050/inv_mpu_ring.c

index 1eb3c26..5096fc4 100644 (file)
@@ -1220,7 +1220,7 @@ int inv_mpu_core_probe(struct regmap *regmap, int irq, const char *name,
        irq_type = irqd_get_trigger_type(desc);
        if (!irq_type)
                irq_type = IRQF_TRIGGER_RISING;
-       if (irq_type == IRQF_TRIGGER_RISING)
+       if (irq_type & IRQF_TRIGGER_RISING)     // rising or both-edge
                st->irq_mask = INV_MPU6050_ACTIVE_HIGH;
        else if (irq_type == IRQF_TRIGGER_FALLING)
                st->irq_mask = INV_MPU6050_ACTIVE_LOW;
index 3755577..f9fdf43 100644 (file)
@@ -185,11 +185,8 @@ irqreturn_t inv_mpu6050_read_fifo(int irq, void *p)
                        "failed to ack interrupt\n");
                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);
+       if (!(int_status & INV_MPU6050_BIT_RAW_DATA_RDY_INT))
                goto end_session;
-       }
 
        if (!(st->chip_config.accl_fifo_enable |
                st->chip_config.gyro_fifo_enable |