iio: triggers: Use macros to avoid boilerplate assignment of owner.
authorJonathan Cameron <jic23@kernel.org>
Sun, 23 Jul 2017 16:25:44 +0000 (17:25 +0100)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Tue, 22 Aug 2017 20:18:32 +0000 (21:18 +0100)
This trig_ops.owner assignment occurs in all trigger drivers and
can be simply automated using a macro as has been done in many
other places in the kernel.

Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Reviewed-by: Lars-Peter Clausen <lars@metafoo.de>
drivers/iio/industrialio-trigger.c
include/linux/iio/trigger.h

index 9596fedacedb2c0f445da031ab3aef930f7f37e6..faf00202915ad5f95da28d9ea8bf5b058b23837d 100644 (file)
@@ -66,10 +66,13 @@ ATTRIBUTE_GROUPS(iio_trig_dev);
 
 static struct iio_trigger *__iio_trigger_find_by_name(const char *name);
 
-int iio_trigger_register(struct iio_trigger *trig_info)
+int __iio_trigger_register(struct iio_trigger *trig_info,
+                          struct module *this_mod)
 {
        int ret;
 
+       trig_info->owner = this_mod;
+
        /* trig_info->ops is required for the module member */
        if (!trig_info->ops)
                return -EINVAL;
@@ -105,7 +108,7 @@ error_unregister_id:
        ida_simple_remove(&iio_trigger_ida, trig_info->id);
        return ret;
 }
-EXPORT_SYMBOL(iio_trigger_register);
+EXPORT_SYMBOL(__iio_trigger_register);
 
 void iio_trigger_unregister(struct iio_trigger *trig_info)
 {
@@ -663,9 +666,10 @@ static void devm_iio_trigger_unreg(struct device *dev, void *res)
 }
 
 /**
- * devm_iio_trigger_register - Resource-managed iio_trigger_register()
+ * __devm_iio_trigger_register - Resource-managed iio_trigger_register()
  * @dev:       device this trigger was allocated for
  * @trig_info: trigger to register
+ * @this_mod:   module registering the trigger
  *
  * Managed iio_trigger_register().  The IIO trigger registered with this
  * function is automatically unregistered on driver detach. This function
@@ -678,7 +682,9 @@ static void devm_iio_trigger_unreg(struct device *dev, void *res)
  * RETURNS:
  * 0 on success, negative error number on failure.
  */
-int devm_iio_trigger_register(struct device *dev, struct iio_trigger *trig_info)
+int __devm_iio_trigger_register(struct device *dev,
+                               struct iio_trigger *trig_info,
+                               struct module *this_mod)
 {
        struct iio_trigger **ptr;
        int ret;
@@ -688,7 +694,7 @@ int devm_iio_trigger_register(struct device *dev, struct iio_trigger *trig_info)
                return -ENOMEM;
 
        *ptr = trig_info;
-       ret = iio_trigger_register(trig_info);
+       ret = __iio_trigger_register(trig_info, this_mod);
        if (!ret)
                devres_add(dev, ptr);
        else
@@ -696,7 +702,7 @@ int devm_iio_trigger_register(struct device *dev, struct iio_trigger *trig_info)
 
        return ret;
 }
-EXPORT_SYMBOL_GPL(devm_iio_trigger_register);
+EXPORT_SYMBOL_GPL(__devm_iio_trigger_register);
 
 /**
  * devm_iio_trigger_unregister - Resource-managed iio_trigger_unregister()
index ea08302f2d7b27967fb1f0947dcede46411f396c..999793212b408d12dd4ace90ffda4459e1ed087c 100644 (file)
@@ -62,6 +62,7 @@ struct iio_trigger_ops {
  **/
 struct iio_trigger {
        const struct iio_trigger_ops    *ops;
+       struct module                   *owner;
        int                             id;
        const char                      *name;
        struct device                   dev;
@@ -87,14 +88,14 @@ static inline struct iio_trigger *to_iio_trigger(struct device *d)
 
 static inline void iio_trigger_put(struct iio_trigger *trig)
 {
-       module_put(trig->ops->owner);
+       module_put(trig->owner);
        put_device(&trig->dev);
 }
 
 static inline struct iio_trigger *iio_trigger_get(struct iio_trigger *trig)
 {
        get_device(&trig->dev);
-       __module_get(trig->ops->owner);
+       __module_get(trig->owner);
 
        return trig;
 }
@@ -127,10 +128,16 @@ static inline void *iio_trigger_get_drvdata(struct iio_trigger *trig)
  * iio_trigger_register() - register a trigger with the IIO core
  * @trig_info: trigger to be registered
  **/
-int iio_trigger_register(struct iio_trigger *trig_info);
-
-int devm_iio_trigger_register(struct device *dev,
-                             struct iio_trigger *trig_info);
+#define iio_trigger_register(trig_info) \
+       __iio_trigger_register((trig_info), THIS_MODULE)
+int __iio_trigger_register(struct iio_trigger *trig_info,
+                          struct module *this_mod);
+
+#define devm_iio_trigger_register(dev, trig_info) \
+       __devm_iio_trigger_register((dev), (trig_info), THIS_MODULE)
+int __devm_iio_trigger_register(struct device *dev,
+                               struct iio_trigger *trig_info,
+                               struct module *this_mod);
 
 /**
  * iio_trigger_unregister() - unregister a trigger from the core