This change bit straightforward and simple, since the
'channel_attr_list' & 'chan_attr_group' fields are only used in
'industrialio-core.c'.

This change moves to the private IIO device object

Signed-off-by: Alexandru Ardelean <alexandru.ardel...@analog.com>
Signed-off-by: Jonathan Cameron <jonathan.came...@huawei.com>
---
 drivers/iio/industrialio-core.c | 46 +++++++++++++++++++--------------
 include/linux/iio/iio-opaque.h  |  5 ++++
 include/linux/iio/iio.h         |  5 ----
 3 files changed, 31 insertions(+), 25 deletions(-)

diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-core.c
index 64174052641a..21fbb187ee79 100644
--- a/drivers/iio/industrialio-core.c
+++ b/drivers/iio/industrialio-core.c
@@ -1137,6 +1137,7 @@ static int iio_device_add_info_mask_type(struct iio_dev 
*indio_dev,
                                         enum iio_shared_by shared_by,
                                         const long *infomask)
 {
+       struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev);
        int i, ret, attrcount = 0;
 
        for_each_set_bit(i, infomask, sizeof(*infomask)*8) {
@@ -1149,7 +1150,7 @@ static int iio_device_add_info_mask_type(struct iio_dev 
*indio_dev,
                                             i,
                                             shared_by,
                                             &indio_dev->dev,
-                                            &indio_dev->channel_attr_list);
+                                            
&iio_dev_opaque->channel_attr_list);
                if ((ret == -EBUSY) && (shared_by != IIO_SEPARATE))
                        continue;
                else if (ret < 0)
@@ -1165,6 +1166,7 @@ static int iio_device_add_info_mask_type_avail(struct 
iio_dev *indio_dev,
                                               enum iio_shared_by shared_by,
                                               const long *infomask)
 {
+       struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev);
        int i, ret, attrcount = 0;
        char *avail_postfix;
 
@@ -1184,7 +1186,7 @@ static int iio_device_add_info_mask_type_avail(struct 
iio_dev *indio_dev,
                                             i,
                                             shared_by,
                                             &indio_dev->dev,
-                                            &indio_dev->channel_attr_list);
+                                            
&iio_dev_opaque->channel_attr_list);
                kfree(avail_postfix);
                if ((ret == -EBUSY) && (shared_by != IIO_SEPARATE))
                        continue;
@@ -1199,6 +1201,7 @@ static int iio_device_add_info_mask_type_avail(struct 
iio_dev *indio_dev,
 static int iio_device_add_channel_sysfs(struct iio_dev *indio_dev,
                                        struct iio_chan_spec const *chan)
 {
+       struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev);
        int ret, attrcount = 0;
        const struct iio_chan_spec_ext_info *ext_info;
 
@@ -1274,7 +1277,7 @@ static int iio_device_add_channel_sysfs(struct iio_dev 
*indio_dev,
                                        i,
                                        ext_info->shared,
                                        &indio_dev->dev,
-                                       &indio_dev->channel_attr_list);
+                                       &iio_dev_opaque->channel_attr_list);
                        i++;
                        if (ret == -EBUSY && ext_info->shared)
                                continue;
@@ -1409,6 +1412,7 @@ static DEVICE_ATTR(current_timestamp_clock, S_IRUGO | 
S_IWUSR,
 
 static int iio_device_register_sysfs(struct iio_dev *indio_dev)
 {
+       struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev);
        int i, ret = 0, attrcount, attrn, attrcount_orig = 0;
        struct iio_dev_attr *p;
        struct attribute **attr, *clk = NULL;
@@ -1448,47 +1452,49 @@ static int iio_device_register_sysfs(struct iio_dev 
*indio_dev)
        if (clk)
                attrcount++;
 
-       indio_dev->chan_attr_group.attrs = kcalloc(attrcount + 1,
-                                                  
sizeof(indio_dev->chan_attr_group.attrs[0]),
-                                                  GFP_KERNEL);
-       if (indio_dev->chan_attr_group.attrs == NULL) {
+       iio_dev_opaque->chan_attr_group.attrs =
+               kcalloc(attrcount + 1,
+                       sizeof(iio_dev_opaque->chan_attr_group.attrs[0]),
+                       GFP_KERNEL);
+       if (iio_dev_opaque->chan_attr_group.attrs == NULL) {
                ret = -ENOMEM;
                goto error_clear_attrs;
        }
        /* Copy across original attributes */
        if (indio_dev->info->attrs)
-               memcpy(indio_dev->chan_attr_group.attrs,
+               memcpy(iio_dev_opaque->chan_attr_group.attrs,
                       indio_dev->info->attrs->attrs,
-                      sizeof(indio_dev->chan_attr_group.attrs[0])
+                      sizeof(iio_dev_opaque->chan_attr_group.attrs[0])
                       *attrcount_orig);
        attrn = attrcount_orig;
        /* Add all elements from the list. */
-       list_for_each_entry(p, &indio_dev->channel_attr_list, l)
-               indio_dev->chan_attr_group.attrs[attrn++] = &p->dev_attr.attr;
+       list_for_each_entry(p, &iio_dev_opaque->channel_attr_list, l)
+               iio_dev_opaque->chan_attr_group.attrs[attrn++] = 
&p->dev_attr.attr;
        if (indio_dev->name)
-               indio_dev->chan_attr_group.attrs[attrn++] = &dev_attr_name.attr;
+               iio_dev_opaque->chan_attr_group.attrs[attrn++] = 
&dev_attr_name.attr;
        if (indio_dev->label)
-               indio_dev->chan_attr_group.attrs[attrn++] = 
&dev_attr_label.attr;
+               iio_dev_opaque->chan_attr_group.attrs[attrn++] = 
&dev_attr_label.attr;
        if (clk)
-               indio_dev->chan_attr_group.attrs[attrn++] = clk;
+               iio_dev_opaque->chan_attr_group.attrs[attrn++] = clk;
 
        indio_dev->groups[indio_dev->groupcounter++] =
-               &indio_dev->chan_attr_group;
+               &iio_dev_opaque->chan_attr_group;
 
        return 0;
 
 error_clear_attrs:
-       iio_free_chan_devattr_list(&indio_dev->channel_attr_list);
+       iio_free_chan_devattr_list(&iio_dev_opaque->channel_attr_list);
 
        return ret;
 }
 
 static void iio_device_unregister_sysfs(struct iio_dev *indio_dev)
 {
+       struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev);
 
-       iio_free_chan_devattr_list(&indio_dev->channel_attr_list);
-       kfree(indio_dev->chan_attr_group.attrs);
-       indio_dev->chan_attr_group.attrs = NULL;
+       iio_free_chan_devattr_list(&iio_dev_opaque->channel_attr_list);
+       kfree(iio_dev_opaque->chan_attr_group.attrs);
+       iio_dev_opaque->chan_attr_group.attrs = NULL;
 }
 
 static void iio_dev_release(struct device *device)
@@ -1543,7 +1549,7 @@ struct iio_dev *iio_device_alloc(struct device *parent, 
int sizeof_priv)
        dev_set_drvdata(&dev->dev, (void *)dev);
        mutex_init(&dev->mlock);
        mutex_init(&dev->info_exist_lock);
-       INIT_LIST_HEAD(&dev->channel_attr_list);
+       INIT_LIST_HEAD(&iio_dev_opaque->channel_attr_list);
 
        dev->id = ida_simple_get(&iio_ida, 0, 0, GFP_KERNEL);
        if (dev->id < 0) {
diff --git a/include/linux/iio/iio-opaque.h b/include/linux/iio/iio-opaque.h
index b3f234b4c1e9..9419a05c698d 100644
--- a/include/linux/iio/iio-opaque.h
+++ b/include/linux/iio/iio-opaque.h
@@ -6,6 +6,9 @@
 /**
  * struct iio_dev_opaque - industrial I/O device opaque information
  * @indio_dev:                 public industrial I/O device information
+ * @channel_attr_list:         keep track of automatically created channel
+ *                             attributes
+ * @chan_attr_group:           group for all attrs in base directory
  * @debugfs_dentry:            device specific debugfs dentry
  * @cached_reg_addr:           cached register address for debugfs reads
  * @read_buf:                  read buffer to be used for the initial reg read
@@ -13,6 +16,8 @@
  */
 struct iio_dev_opaque {
        struct iio_dev                  indio_dev;
+       struct list_head                channel_attr_list;
+       struct attribute_group          chan_attr_group;
 #if defined(CONFIG_DEBUG_FS)
        struct dentry                   *debugfs_dentry;
        unsigned                        cached_reg_addr;
diff --git a/include/linux/iio/iio.h b/include/linux/iio/iio.h
index bb0aae11a111..30e6fc1506ea 100644
--- a/include/linux/iio/iio.h
+++ b/include/linux/iio/iio.h
@@ -506,9 +506,6 @@ struct iio_buffer_setup_ops {
  * @pollfunc_event:    [DRIVER] function run on events trigger being received
  * @channels:          [DRIVER] channel specification structure table
  * @num_channels:      [DRIVER] number of channels specified in @channels.
- * @channel_attr_list: [INTERN] keep track of automatically created channel
- *                     attributes
- * @chan_attr_group:   [INTERN] group for all attrs in base directory
  * @name:              [DRIVER] name of the device.
  * @label:              [DRIVER] unique name to identify which device this is
  * @info:              [DRIVER] callbacks and constant info from driver
@@ -551,8 +548,6 @@ struct iio_dev {
        struct iio_chan_spec const      *channels;
        int                             num_channels;
 
-       struct list_head                channel_attr_list;
-       struct attribute_group          chan_attr_group;
        const char                      *name;
        const char                      *label;
        const struct iio_info           *info;
-- 
2.17.1

Reply via email to