iio: buffer: refactor buffer attributes setup
authorOctavian Purdila <octavian.purdila@intel.com>
Sat, 31 Jan 2015 00:00:00 +0000 (02:00 +0200)
committerJonathan Cameron <jic23@kernel.org>
Wed, 4 Feb 2015 18:46:29 +0000 (18:46 +0000)
Move all core (non-custom) buffer attributes to a vector to make it
easier to add more of them in the future.

Signed-off-by: Octavian Purdila <octavian.purdila@intel.com>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
drivers/iio/industrialio-buffer.c

index 7133314..c2d5440 100644 (file)
@@ -761,6 +761,11 @@ static struct device_attribute dev_attr_length_ro = __ATTR(length,
 static DEVICE_ATTR(enable, S_IRUGO | S_IWUSR,
                   iio_buffer_show_enable, iio_buffer_store_enable);
 
+static struct attribute *iio_buffer_attrs[] = {
+       &dev_attr_length.attr,
+       &dev_attr_enable.attr,
+};
+
 int iio_buffer_alloc_sysfs_and_mask(struct iio_dev *indio_dev)
 {
        struct iio_dev_attr *p;
@@ -778,21 +783,23 @@ int iio_buffer_alloc_sysfs_and_mask(struct iio_dev *indio_dev)
                        attrcount++;
        }
 
-       buffer->buffer_group.name = "buffer";
-       buffer->buffer_group.attrs = kcalloc(attrcount + 3,
-                       sizeof(*buffer->buffer_group.attrs), GFP_KERNEL);
-       if (!buffer->buffer_group.attrs)
+       attr = kcalloc(attrcount + ARRAY_SIZE(iio_buffer_attrs) + 1,
+                      sizeof(struct attribute *), GFP_KERNEL);
+       if (!attr)
                return -ENOMEM;
 
-       if (buffer->access->set_length)
-               buffer->buffer_group.attrs[0] = &dev_attr_length.attr;
-       else
-               buffer->buffer_group.attrs[0] = &dev_attr_length_ro.attr;
-       buffer->buffer_group.attrs[1] = &dev_attr_enable.attr;
+       memcpy(attr, iio_buffer_attrs, sizeof(iio_buffer_attrs));
+       if (!buffer->access->set_length)
+               attr[0] = &dev_attr_length_ro.attr;
+
        if (buffer->attrs)
-               memcpy(&buffer->buffer_group.attrs[2], buffer->attrs,
-                       sizeof(*&buffer->buffer_group.attrs) * attrcount);
-       buffer->buffer_group.attrs[attrcount+2] = NULL;
+               memcpy(&attr[ARRAY_SIZE(iio_buffer_attrs)], buffer->attrs,
+                      sizeof(struct attribute *) * attrcount);
+
+       attr[attrcount + ARRAY_SIZE(iio_buffer_attrs)] = NULL;
+
+       buffer->buffer_group.name = "buffer";
+       buffer->buffer_group.attrs = attr;
 
        indio_dev->groups[indio_dev->groupcounter++] = &buffer->buffer_group;