Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6da9b382 authored by Octavian Purdila's avatar Octavian Purdila Committed by Jonathan Cameron
Browse files

iio: buffer: refactor buffer attributes setup



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: default avatarOctavian Purdila <octavian.purdila@intel.com>
Signed-off-by: default avatarJonathan Cameron <jic23@kernel.org>
parent ee3ac290
Loading
Loading
Loading
Loading
+19 −12
Original line number Diff line number Diff line
@@ -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;