iio: core: move @driver_module from struct iio_dev to struct iio_dev_opaque
authorJonathan Cameron <Jonathan.Cameron@huawei.com>
Mon, 26 Apr 2021 17:49:05 +0000 (18:49 +0100)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Mon, 17 May 2021 12:49:13 +0000 (13:49 +0100)
Continuing move to hide internal elements from drivers, move this structure
element over.  It's only accessed from iio core files so this one was
straight forward and no accessor functions are needed.

Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Reviewed-by: Alexandru Ardelean <ardeleanalex@gmail.com>
Link: https://lore.kernel.org/r/20210426174911.397061-4-jic23@kernel.org
drivers/iio/industrialio-core.c
drivers/iio/industrialio-trigger.c
include/linux/iio/iio-opaque.h
include/linux/iio/iio.h

index ec21341c6322ee86f1003b9d5d437df520d63597..58b35db00a8184922f4a846c68e21eebe90e6f92 100644 (file)
@@ -1858,7 +1858,7 @@ int __iio_device_register(struct iio_dev *indio_dev, struct module *this_mod)
        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;
index 3236647b2c37fabf0c01acb5e449c5a94d70fee7..b489eeeb00045daa818991233ae880212c8813af 100644 (file)
@@ -13,6 +13,7 @@
 #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"
@@ -240,12 +241,13 @@ static void iio_trigger_put_irq(struct iio_trigger *trig, int irq)
 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);
@@ -284,13 +286,14 @@ out_free_irq:
 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;
@@ -304,7 +307,7 @@ int iio_trigger_detach_poll_func(struct iio_trigger *trig,
                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;
 }
index f876e3aede2cb1ac887bed35603158c4350de6e1..96dd265103d0471b15dae3328ef3ddd8f6393f9d 100644 (file)
@@ -7,6 +7,7 @@
  * 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
@@ -28,6 +29,7 @@
 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;
index 569861d5887ace0a8c1858eee788234d42869922..9e8e1358a032a6b9488e3eed7ecdc323f7187c62 100644 (file)
@@ -488,7 +488,6 @@ struct iio_buffer_setup_ops {
 
 /**
  * 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
@@ -522,8 +521,6 @@ struct iio_buffer_setup_ops {
  *                     **MUST** be accessed **ONLY** via iio_priv() helper
  */
 struct iio_dev {
-       struct module                   *driver_module;
-
        int                             modes;
        int                             currentmode;
        struct device                   dev;