if (!indio_dev->info)
                return -EINVAL;
 
-       indio_dev->driver_module = this_mod;
+       iio_dev_opaque->driver_module = this_mod;
        /* If the calling driver did not initialize of_node, do it here */
        if (!indio_dev->dev.of_node && indio_dev->dev.parent)
                indio_dev->dev.of_node = indio_dev->dev.parent->of_node;
 
 #include <linux/slab.h>
 
 #include <linux/iio/iio.h>
+#include <linux/iio/iio-opaque.h>
 #include <linux/iio/trigger.h>
 #include "iio_core.h"
 #include "iio_core_trigger.h"
 int iio_trigger_attach_poll_func(struct iio_trigger *trig,
                                 struct iio_poll_func *pf)
 {
+       struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(pf->indio_dev);
        bool notinuse =
                bitmap_empty(trig->pool, CONFIG_IIO_CONSUMERS_PER_TRIGGER);
        int ret = 0;
 
        /* Prevent the module from being removed whilst attached to a trigger */
-       __module_get(pf->indio_dev->driver_module);
+       __module_get(iio_dev_opaque->driver_module);
 
        /* Get irq number */
        pf->irq = iio_trigger_get_irq(trig);
 out_put_irq:
        iio_trigger_put_irq(trig, pf->irq);
 out_put_module:
-       module_put(pf->indio_dev->driver_module);
+       module_put(iio_dev_opaque->driver_module);
        return ret;
 }
 
 int iio_trigger_detach_poll_func(struct iio_trigger *trig,
                                 struct iio_poll_func *pf)
 {
+       struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(pf->indio_dev);
        bool no_other_users =
                bitmap_weight(trig->pool, CONFIG_IIO_CONSUMERS_PER_TRIGGER) == 1;
        int ret = 0;
                trig->attached_own_device = false;
        iio_trigger_put_irq(trig, pf->irq);
        free_irq(pf->irq, pf);
-       module_put(pf->indio_dev->driver_module);
+       module_put(iio_dev_opaque->driver_module);
 
        return ret;
 }
 
  * struct iio_dev_opaque - industrial I/O device opaque information
  * @indio_dev:                 public industrial I/O device information
  * @id:                        used to identify device internally
+ * @driver_module:             used to make it harder to undercut users
  * @event_interface:           event chrdevs associated with interrupt lines
  * @attached_buffers:          array of buffers statically attached by the driver
  * @attached_buffers_cnt:      number of buffers in the array of statically attached buffers
 struct iio_dev_opaque {
        struct iio_dev                  indio_dev;
        int                             id;
+       struct module                   *driver_module;
        struct iio_event_interface      *event_interface;
        struct iio_buffer               **attached_buffers;
        unsigned int                    attached_buffers_cnt;
 
 
 /**
  * struct iio_dev - industrial I/O device
- * @driver_module:     [INTERN] used to make it harder to undercut users
  * @modes:             [DRIVER] operating modes supported by device
  * @currentmode:       [DRIVER] current operating mode
  * @dev:               [DRIVER] device structure, should be assigned a parent
  *                     **MUST** be accessed **ONLY** via iio_priv() helper
  */
 struct iio_dev {
-       struct module                   *driver_module;
-
        int                             modes;
        int                             currentmode;
        struct device                   dev;