Merge tag 'x86-urgent-2022-08-06' of git://git.kernel.org/pub/scm/linux/kernel/git...
[linux-2.6-microblaze.git] / drivers / iio / industrialio-trigger.c
index 585b6ce..b78814d 100644 (file)
@@ -37,7 +37,7 @@ static LIST_HEAD(iio_trigger_list);
 static DEFINE_MUTEX(iio_trigger_list_lock);
 
 /**
- * iio_trigger_read_name() - retrieve useful identifying name
+ * name_show() - retrieve useful identifying name
  * @dev:       device associated with the iio_trigger
  * @attr:      pointer to the device_attribute structure that is
  *             being processed
@@ -46,15 +46,14 @@ static DEFINE_MUTEX(iio_trigger_list_lock);
  * Return: a negative number on failure or the number of written
  *        characters on success.
  */
-static ssize_t iio_trigger_read_name(struct device *dev,
-                                    struct device_attribute *attr,
-                                    char *buf)
+static ssize_t name_show(struct device *dev, struct device_attribute *attr,
+                        char *buf)
 {
        struct iio_trigger *trig = to_iio_trigger(dev);
        return sysfs_emit(buf, "%s\n", trig->name);
 }
 
-static DEVICE_ATTR(name, S_IRUGO, iio_trigger_read_name, NULL);
+static DEVICE_ATTR_RO(name);
 
 static struct attribute *iio_trig_dev_attrs[] = {
        &dev_attr_name.attr,
@@ -64,14 +63,11 @@ 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,
-                          struct module *this_mod)
+int iio_trigger_register(struct iio_trigger *trig_info)
 {
        int ret;
 
-       trig_info->owner = this_mod;
-
-       trig_info->id = ida_simple_get(&iio_trigger_ida, 0, 0, GFP_KERNEL);
+       trig_info->id = ida_alloc(&iio_trigger_ida, GFP_KERNEL);
        if (trig_info->id < 0)
                return trig_info->id;
 
@@ -98,10 +94,10 @@ error_device_del:
        mutex_unlock(&iio_trigger_list_lock);
        device_del(&trig_info->dev);
 error_unregister_id:
-       ida_simple_remove(&iio_trigger_ida, trig_info->id);
+       ida_free(&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)
 {
@@ -109,7 +105,7 @@ void iio_trigger_unregister(struct iio_trigger *trig_info)
        list_del(&trig_info->list);
        mutex_unlock(&iio_trigger_list_lock);
 
-       ida_simple_remove(&iio_trigger_ida, trig_info->id);
+       ida_free(&iio_trigger_ida, trig_info->id);
        /* Possible issue in here */
        device_del(&trig_info->dev);
 }
@@ -368,8 +364,8 @@ struct iio_poll_func
        va_list vargs;
        struct iio_poll_func *pf;
 
-       pf = kmalloc(sizeof *pf, GFP_KERNEL);
-       if (pf == NULL)
+       pf = kmalloc(sizeof(*pf), GFP_KERNEL);
+       if (!pf)
                return NULL;
        va_start(vargs, fmt);
        pf->name = kvasprintf(GFP_KERNEL, fmt, vargs);
@@ -395,7 +391,7 @@ void iio_dealloc_pollfunc(struct iio_poll_func *pf)
 EXPORT_SYMBOL_GPL(iio_dealloc_pollfunc);
 
 /**
- * iio_trigger_read_current() - trigger consumer sysfs query current trigger
+ * current_trigger_show() - trigger consumer sysfs query current trigger
  * @dev:       device associated with an industrial I/O device
  * @attr:      pointer to the device_attribute structure that
  *             is being processed
@@ -407,9 +403,8 @@ EXPORT_SYMBOL_GPL(iio_dealloc_pollfunc);
  * Return: a negative number on failure, the number of characters written
  *        on success or 0 if no trigger is available
  */
-static ssize_t iio_trigger_read_current(struct device *dev,
-                                       struct device_attribute *attr,
-                                       char *buf)
+static ssize_t current_trigger_show(struct device *dev,
+                                   struct device_attribute *attr, char *buf)
 {
        struct iio_dev *indio_dev = dev_to_iio_dev(dev);
 
@@ -419,7 +414,7 @@ static ssize_t iio_trigger_read_current(struct device *dev,
 }
 
 /**
- * iio_trigger_write_current() - trigger consumer sysfs set current trigger
+ * current_trigger_store() - trigger consumer sysfs set current trigger
  * @dev:       device associated with an industrial I/O device
  * @attr:      device attribute that is being processed
  * @buf:       string buffer that holds the name of the trigger
@@ -432,10 +427,9 @@ static ssize_t iio_trigger_read_current(struct device *dev,
  * Return: negative error code on failure or length of the buffer
  *        on success
  */
-static ssize_t iio_trigger_write_current(struct device *dev,
-                                        struct device_attribute *attr,
-                                        const char *buf,
-                                        size_t len)
+static ssize_t current_trigger_store(struct device *dev,
+                                    struct device_attribute *attr,
+                                    const char *buf, size_t len)
 {
        struct iio_dev *indio_dev = dev_to_iio_dev(dev);
        struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev);
@@ -494,9 +488,7 @@ out_trigger_put:
        return ret;
 }
 
-static DEVICE_ATTR(current_trigger, S_IRUGO | S_IWUSR,
-                  iio_trigger_read_current,
-                  iio_trigger_write_current);
+static DEVICE_ATTR_RW(current_trigger);
 
 static struct attribute *iio_trigger_consumer_attrs[] = {
        &dev_attr_current_trigger.attr,
@@ -552,15 +544,16 @@ static void iio_trig_subirqunmask(struct irq_data *d)
        trig->subirqs[d->irq - trig->subirq_base].enabled = true;
 }
 
-static __printf(2, 0)
+static __printf(3, 0)
 struct iio_trigger *viio_trigger_alloc(struct device *parent,
+                                      struct module *this_mod,
                                       const char *fmt,
                                       va_list vargs)
 {
        struct iio_trigger *trig;
        int i;
 
-       trig = kzalloc(sizeof *trig, GFP_KERNEL);
+       trig = kzalloc(sizeof(*trig), GFP_KERNEL);
        if (!trig)
                return NULL;
 
@@ -581,6 +574,10 @@ struct iio_trigger *viio_trigger_alloc(struct device *parent,
        if (trig->name == NULL)
                goto free_descs;
 
+       INIT_LIST_HEAD(&trig->list);
+
+       trig->owner = this_mod;
+
        trig->subirq_chip.name = trig->name;
        trig->subirq_chip.irq_mask = &iio_trig_subirqmask;
        trig->subirq_chip.irq_unmask = &iio_trig_subirqunmask;
@@ -601,8 +598,9 @@ free_trig:
 }
 
 /**
- * iio_trigger_alloc - Allocate a trigger
+ * __iio_trigger_alloc - Allocate a trigger
  * @parent:            Device to allocate iio_trigger for
+ * @this_mod:          module allocating the trigger
  * @fmt:               trigger name format. If it includes format
  *                     specifiers, the additional arguments following
  *                     format are formatted and inserted in the resulting
@@ -610,18 +608,20 @@ free_trig:
  * RETURNS:
  * Pointer to allocated iio_trigger on success, NULL on failure.
  */
-struct iio_trigger *iio_trigger_alloc(struct device *parent, const char *fmt, ...)
+struct iio_trigger *__iio_trigger_alloc(struct device *parent,
+                                       struct module *this_mod,
+                                       const char *fmt, ...)
 {
        struct iio_trigger *trig;
        va_list vargs;
 
        va_start(vargs, fmt);
-       trig = viio_trigger_alloc(parent, fmt, vargs);
+       trig = viio_trigger_alloc(parent, this_mod, fmt, vargs);
        va_end(vargs);
 
        return trig;
 }
-EXPORT_SYMBOL(iio_trigger_alloc);
+EXPORT_SYMBOL(__iio_trigger_alloc);
 
 void iio_trigger_free(struct iio_trigger *trig)
 {
@@ -636,10 +636,11 @@ static void devm_iio_trigger_release(struct device *dev, void *res)
 }
 
 /**
- * devm_iio_trigger_alloc - Resource-managed iio_trigger_alloc()
+ * __devm_iio_trigger_alloc - Resource-managed iio_trigger_alloc()
  * Managed iio_trigger_alloc.  iio_trigger allocated with this function is
  * automatically freed on driver detach.
  * @parent:            Device to allocate iio_trigger for
+ * @this_mod:          module allocating the trigger
  * @fmt:               trigger name format. If it includes format
  *                     specifiers, the additional arguments following
  *                     format are formatted and inserted in the resulting
@@ -649,7 +650,9 @@ static void devm_iio_trigger_release(struct device *dev, void *res)
  * RETURNS:
  * Pointer to allocated iio_trigger on success, NULL on failure.
  */
-struct iio_trigger *devm_iio_trigger_alloc(struct device *parent, const char *fmt, ...)
+struct iio_trigger *__devm_iio_trigger_alloc(struct device *parent,
+                                            struct module *this_mod,
+                                            const char *fmt, ...)
 {
        struct iio_trigger **ptr, *trig;
        va_list vargs;
@@ -661,7 +664,7 @@ struct iio_trigger *devm_iio_trigger_alloc(struct device *parent, const char *fm
 
        /* use raw alloc_dr for kmalloc caller tracing */
        va_start(vargs, fmt);
-       trig = viio_trigger_alloc(parent, fmt, vargs);
+       trig = viio_trigger_alloc(parent, this_mod, fmt, vargs);
        va_end(vargs);
        if (trig) {
                *ptr = trig;
@@ -672,7 +675,7 @@ struct iio_trigger *devm_iio_trigger_alloc(struct device *parent, const char *fm
 
        return trig;
 }
-EXPORT_SYMBOL_GPL(devm_iio_trigger_alloc);
+EXPORT_SYMBOL_GPL(__devm_iio_trigger_alloc);
 
 static void devm_iio_trigger_unreg(void *trigger_info)
 {
@@ -680,10 +683,9 @@ static void devm_iio_trigger_unreg(void *trigger_info)
 }
 
 /**
- * __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
@@ -693,19 +695,18 @@ static void devm_iio_trigger_unreg(void *trigger_info)
  * RETURNS:
  * 0 on success, negative error number on failure.
  */
-int __devm_iio_trigger_register(struct device *dev,
-                               struct iio_trigger *trig_info,
-                               struct module *this_mod)
+int devm_iio_trigger_register(struct device *dev,
+                             struct iio_trigger *trig_info)
 {
        int ret;
 
-       ret = __iio_trigger_register(trig_info, this_mod);
+       ret = iio_trigger_register(trig_info);
        if (ret)
                return ret;
 
        return devm_add_action_or_reset(dev, devm_iio_trigger_unreg, trig_info);
 }
-EXPORT_SYMBOL_GPL(__devm_iio_trigger_register);
+EXPORT_SYMBOL_GPL(devm_iio_trigger_register);
 
 bool iio_trigger_using_own(struct iio_dev *indio_dev)
 {