.mask_int2 = ST_ACCEL_1_DRDY_IRQ_INT2_MASK,
                        .addr_ihl = ST_ACCEL_1_IHL_IRQ_ADDR,
                        .mask_ihl = ST_ACCEL_1_IHL_IRQ_MASK,
+                       .addr_stat_drdy = ST_SENSORS_DEFAULT_STAT_ADDR,
                },
                .multi_read_bit = ST_ACCEL_1_MULTIREAD_BIT,
                .bootime = 2,
                        .mask_int2 = ST_ACCEL_2_DRDY_IRQ_INT2_MASK,
                        .addr_ihl = ST_ACCEL_2_IHL_IRQ_ADDR,
                        .mask_ihl = ST_ACCEL_2_IHL_IRQ_MASK,
+                       .addr_stat_drdy = ST_SENSORS_DEFAULT_STAT_ADDR,
                },
                .multi_read_bit = ST_ACCEL_2_MULTIREAD_BIT,
                .bootime = 2,
                        .mask_int2 = ST_ACCEL_3_DRDY_IRQ_INT2_MASK,
                        .addr_ihl = ST_ACCEL_3_IHL_IRQ_ADDR,
                        .mask_ihl = ST_ACCEL_3_IHL_IRQ_MASK,
+                       .addr_stat_drdy = ST_SENSORS_DEFAULT_STAT_ADDR,
                        .ig1 = {
                                .en_addr = ST_ACCEL_3_IG1_EN_ADDR,
                                .en_mask = ST_ACCEL_3_IG1_EN_MASK,
                .drdy_irq = {
                        .addr = ST_ACCEL_4_DRDY_IRQ_ADDR,
                        .mask_int1 = ST_ACCEL_4_DRDY_IRQ_INT1_MASK,
+                       .addr_stat_drdy = ST_SENSORS_DEFAULT_STAT_ADDR,
                },
                .multi_read_bit = ST_ACCEL_4_MULTIREAD_BIT,
                .bootime = 2, /* guess */
                        .mask_int2 = ST_ACCEL_5_DRDY_IRQ_INT2_MASK,
                        .addr_ihl = ST_ACCEL_5_IHL_IRQ_ADDR,
                        .mask_ihl = ST_ACCEL_5_IHL_IRQ_MASK,
+                       .addr_stat_drdy = ST_SENSORS_DEFAULT_STAT_ADDR,
                },
                .multi_read_bit = ST_ACCEL_5_MULTIREAD_BIT,
                .bootime = 2, /* guess */
 
        struct iio_dev *indio_dev = pf->indio_dev;
        struct st_sensor_data *sdata = iio_priv(indio_dev);
 
+       /* If we have a status register, check if this IRQ came from us */
+       if (sdata->sensor_settings->drdy_irq.addr_stat_drdy) {
+               u8 status;
+
+               len = sdata->tf->read_byte(&sdata->tb, sdata->dev,
+                          sdata->sensor_settings->drdy_irq.addr_stat_drdy,
+                          &status);
+               if (len < 0)
+                       dev_err(sdata->dev, "could not read channel status\n");
+
+               /*
+                * If this was not caused by any channels on this sensor,
+                * return IRQ_NONE
+                */
+               if (!(status & (u8)indio_dev->active_scan_mask[0]))
+                       return IRQ_NONE;
+       }
+
        len = st_sensors_get_buffer_element(indio_dev, sdata->buffer_data);
        if (len < 0)
                goto st_sensors_get_buffer_element_error;
 
                         * drain settings, but only for INT1 and not
                         * for the DRDY line on INT2.
                         */
+                       .addr_stat_drdy = ST_SENSORS_DEFAULT_STAT_ADDR,
                },
                .multi_read_bit = ST_GYRO_1_MULTIREAD_BIT,
                .bootime = 2,
                         * drain settings, but only for INT1 and not
                         * for the DRDY line on INT2.
                         */
+                       .addr_stat_drdy = ST_SENSORS_DEFAULT_STAT_ADDR,
                },
                .multi_read_bit = ST_GYRO_2_MULTIREAD_BIT,
                .bootime = 2,
                         * drain settings, but only for INT1 and not
                         * for the DRDY line on INT2.
                         */
+                       .addr_stat_drdy = ST_SENSORS_DEFAULT_STAT_ADDR,
                },
                .multi_read_bit = ST_GYRO_3_MULTIREAD_BIT,
                .bootime = 2,
 
                        .mask_int1 = ST_MAGN_3_DRDY_INT_MASK,
                        .addr_ihl = ST_MAGN_3_IHL_IRQ_ADDR,
                        .mask_ihl = ST_MAGN_3_IHL_IRQ_MASK,
+                       .addr_stat_drdy = ST_SENSORS_DEFAULT_STAT_ADDR,
                },
                .multi_read_bit = ST_MAGN_3_MULTIREAD_BIT,
                .bootime = 2,
 
                        .mask_int2 = ST_PRESS_LPS331AP_DRDY_IRQ_INT2_MASK,
                        .addr_ihl = ST_PRESS_LPS331AP_IHL_IRQ_ADDR,
                        .mask_ihl = ST_PRESS_LPS331AP_IHL_IRQ_MASK,
+                       .addr_stat_drdy = ST_SENSORS_DEFAULT_STAT_ADDR,
                },
                .multi_read_bit = ST_PRESS_LPS331AP_MULTIREAD_BIT,
                .bootime = 2,
                        .mask_int2 = ST_PRESS_LPS25H_DRDY_IRQ_INT2_MASK,
                        .addr_ihl = ST_PRESS_LPS25H_IHL_IRQ_ADDR,
                        .mask_ihl = ST_PRESS_LPS25H_IHL_IRQ_MASK,
+                       .addr_stat_drdy = ST_SENSORS_DEFAULT_STAT_ADDR,
                },
                .multi_read_bit = ST_PRESS_LPS25H_MULTIREAD_BIT,
                .bootime = 2,
 
 #define ST_SENSORS_DEFAULT_AXIS_ADDR           0x20
 #define ST_SENSORS_DEFAULT_AXIS_MASK           0x07
 #define ST_SENSORS_DEFAULT_AXIS_N_BIT          3
+#define ST_SENSORS_DEFAULT_STAT_ADDR           0x27
 
 #define ST_SENSORS_MAX_NAME                    17
 #define ST_SENSORS_MAX_4WAI                    7
  * @mask_int2: mask to enable/disable IRQ on INT2 pin.
  * @addr_ihl: address to enable/disable active low on the INT lines.
  * @mask_ihl: mask to enable/disable active low on the INT lines.
+ * @addr_stat_drdy: address to read status of DRDY (data ready) interrupt
  * struct ig1 - represents the Interrupt Generator 1 of sensors.
  * @en_addr: address of the enable ig1 register.
  * @en_mask: mask to write the on/off value for enable.
        u8 mask_int2;
        u8 addr_ihl;
        u8 mask_ihl;
+       u8 addr_stat_drdy;
        struct {
                u8 en_addr;
                u8 en_mask;