struct st_sensor_data *sdata = iio_priv(indio_dev);
 
        /* Sensor does not support interrupts */
-       if (sdata->sensor_settings->drdy_irq.addr == 0) {
+       if (!sdata->sensor_settings->drdy_irq.int1.addr &&
+           !sdata->sensor_settings->drdy_irq.int2.addr) {
                if (pdata->drdy_int_pin)
                        dev_info(&indio_dev->dev,
                                 "DRDY on pin INT%d specified, but sensor "
 
        switch (pdata->drdy_int_pin) {
        case 1:
-               if (sdata->sensor_settings->drdy_irq.mask_int1 == 0) {
+               if (!sdata->sensor_settings->drdy_irq.int1.mask) {
                        dev_err(&indio_dev->dev,
                                        "DRDY on INT1 not available.\n");
                        return -EINVAL;
                sdata->drdy_int_pin = 1;
                break;
        case 2:
-               if (sdata->sensor_settings->drdy_irq.mask_int2 == 0) {
+               if (!sdata->sensor_settings->drdy_irq.int2.mask) {
                        dev_err(&indio_dev->dev,
                                        "DRDY on INT2 not available.\n");
                        return -EINVAL;
 int st_sensors_set_dataready_irq(struct iio_dev *indio_dev, bool enable)
 {
        int err;
-       u8 drdy_mask;
+       u8 drdy_addr, drdy_mask;
        struct st_sensor_data *sdata = iio_priv(indio_dev);
 
-       if (!sdata->sensor_settings->drdy_irq.addr) {
+       if (!sdata->sensor_settings->drdy_irq.int1.addr &&
+           !sdata->sensor_settings->drdy_irq.int2.addr) {
                /*
                 * there are some devices (e.g. LIS3MDL) where drdy line is
                 * routed to a given pin and it is not possible to select a
                        goto st_accel_set_dataready_irq_error;
        }
 
-       if (sdata->drdy_int_pin == 1)
-               drdy_mask = sdata->sensor_settings->drdy_irq.mask_int1;
-       else
-               drdy_mask = sdata->sensor_settings->drdy_irq.mask_int2;
+       if (sdata->drdy_int_pin == 1) {
+               drdy_addr = sdata->sensor_settings->drdy_irq.int1.addr;
+               drdy_mask = sdata->sensor_settings->drdy_irq.int1.mask;
+       } else {
+               drdy_addr = sdata->sensor_settings->drdy_irq.int2.addr;
+               drdy_mask = sdata->sensor_settings->drdy_irq.int2.mask;
+       }
 
        /* Flag to the poll function that the hardware trigger is in use */
        sdata->hw_irq_trigger = enable;
 
        /* Enable/Disable the interrupt generator for data ready. */
-       err = st_sensors_write_data_with_mask(indio_dev,
-                                       sdata->sensor_settings->drdy_irq.addr,
-                                       drdy_mask, (int)enable);
+       err = st_sensors_write_data_with_mask(indio_dev, drdy_addr,
+                                             drdy_mask, (int)enable);
 
 st_accel_set_dataready_irq_error:
        return err;
 
                        .mask = 0x04,
                },
                .drdy_irq = {
-                       .addr = 0x22,
-                       .mask_int1 = 0x04,
-                       .mask_int2 = 0x20,
+                       .int1 = {
+                               .addr = 0x22,
+                               .mask = 0x04,
+                       },
+                       .int2 = {
+                               .addr = 0x22,
+                               .mask = 0x20,
+                       },
                        .addr_ihl = 0x22,
                        .mask_ihl = 0x80,
                        .addr_od = 0x22,
                        .addr = 0x20,
                        .mask = 0x04,
                },
-               .drdy_irq = {
-                       .addr = 0,
-               },
                .multi_read_bit = true,
                .bootime = 2,
        },
                        .mask = 0x04,
                },
                .drdy_irq = {
-                       .addr = 0x23,
-                       .mask_int1 = 0x01,
-                       .mask_int2 = 0x00,
+                       .int1 = {
+                               .addr = 0x23,
+                               .mask = 0x01,
+                       },
                        .addr_ihl = 0x22,
                        .mask_ihl = 0x80,
                        .addr_od = 0x22,
                        .mask = 0x02,
                },
                .drdy_irq = {
-                       .addr = 0x12,
-                       .mask_int1 = 0x04,
-                       .mask_int2 = 0x00,
+                       .int1 = {
+                               .addr = 0x12,
+                               .mask = 0x04,
+                       },
                        .addr_ihl = 0x12,
                        .mask_ihl = 0x80,
                        .addr_od = 0x12,
        press_data->odr = press_data->sensor_settings->odr.odr_avl[0].hz;
 
        /* Some devices don't support a data ready pin. */
-       if (!pdata && press_data->sensor_settings->drdy_irq.addr)
+       if (!pdata && (press_data->sensor_settings->drdy_irq.int1.addr ||
+                      press_data->sensor_settings->drdy_irq.int2.addr))
                pdata = (struct st_sensors_platform_data *)&default_press_pdata;
 
        err = st_sensors_init_sensor(indio_dev, press_data->dev->platform_data);
 
 
 /**
  * struct st_sensor_data_ready_irq - ST sensor device data-ready interrupt
- * @addr: address of the register.
- * @mask_int1: mask to enable/disable IRQ on INT1 pin.
- * @mask_int2: mask to enable/disable IRQ on INT2 pin.
+ * struct int1 - data-ready configuration register for INT1 pin.
+ * struct int2 - data-ready configuration register for 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_od: address to enable/disable Open Drain on the INT lines.
  * @en_mask: mask to write the on/off value for enable.
  */
 struct st_sensor_data_ready_irq {
-       u8 addr;
-       u8 mask_int1;
-       u8 mask_int2;
+       struct {
+               u8 addr;
+               u8 mask;
+       } int1;
+       struct {
+               u8 addr;
+               u8 mask;
+       } int2;
        u8 addr_ihl;
        u8 mask_ihl;
        u8 addr_od;