aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/iio
diff options
context:
space:
mode:
authorLars-Peter Clausen <lars@metafoo.de>2014-11-26 12:55:16 -0500
committerJonathan Cameron <jic23@kernel.org>2014-12-12 07:28:33 -0500
commit8d92db2827b68206f6930e79132243416183e083 (patch)
tree87306f1100237e03eab910b49800ac40c36b6916 /drivers/iio
parent08e7e0adaa17205f86894157d86c4bee3c714330 (diff)
iio: buffer: Make length attribute read only for buffers without set_length
If a buffer implementation does not implement the set_length() callback the length will be static and can not be changed by userspace. Mark the length attribute as a read only property in this case so userspace is aware of this rather than just silently accepting any length value. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Signed-off-by: Jonathan Cameron <jic23@kernel.org>
Diffstat (limited to 'drivers/iio')
-rw-r--r--drivers/iio/industrialio-buffer.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/drivers/iio/industrialio-buffer.c b/drivers/iio/industrialio-buffer.c
index ba89357fc096..4ca4c0a09923 100644
--- a/drivers/iio/industrialio-buffer.c
+++ b/drivers/iio/industrialio-buffer.c
@@ -418,8 +418,7 @@ static ssize_t iio_buffer_write_length(struct device *dev,
418 if (iio_buffer_is_active(indio_dev->buffer)) { 418 if (iio_buffer_is_active(indio_dev->buffer)) {
419 ret = -EBUSY; 419 ret = -EBUSY;
420 } else { 420 } else {
421 if (buffer->access->set_length) 421 buffer->access->set_length(buffer, val);
422 buffer->access->set_length(buffer, val);
423 ret = 0; 422 ret = 0;
424 } 423 }
425 mutex_unlock(&indio_dev->mlock); 424 mutex_unlock(&indio_dev->mlock);
@@ -760,6 +759,8 @@ static const char * const iio_scan_elements_group_name = "scan_elements";
760 759
761static DEVICE_ATTR(length, S_IRUGO | S_IWUSR, iio_buffer_read_length, 760static DEVICE_ATTR(length, S_IRUGO | S_IWUSR, iio_buffer_read_length,
762 iio_buffer_write_length); 761 iio_buffer_write_length);
762static struct device_attribute dev_attr_length_ro = __ATTR(length,
763 S_IRUGO, iio_buffer_read_length, NULL);
763static DEVICE_ATTR(enable, S_IRUGO | S_IWUSR, 764static DEVICE_ATTR(enable, S_IRUGO | S_IWUSR,
764 iio_buffer_show_enable, iio_buffer_store_enable); 765 iio_buffer_show_enable, iio_buffer_store_enable);
765 766
@@ -786,7 +787,10 @@ int iio_buffer_alloc_sysfs_and_mask(struct iio_dev *indio_dev)
786 if (!buffer->buffer_group.attrs) 787 if (!buffer->buffer_group.attrs)
787 return -ENOMEM; 788 return -ENOMEM;
788 789
789 buffer->buffer_group.attrs[0] = &dev_attr_length.attr; 790 if (buffer->access->set_length)
791 buffer->buffer_group.attrs[0] = &dev_attr_length.attr;
792 else
793 buffer->buffer_group.attrs[0] = &dev_attr_length_ro.attr;
790 buffer->buffer_group.attrs[1] = &dev_attr_enable.attr; 794 buffer->buffer_group.attrs[1] = &dev_attr_enable.attr;
791 if (buffer->attrs) 795 if (buffer->attrs)
792 memcpy(&buffer->buffer_group.attrs[2], buffer->attrs, 796 memcpy(&buffer->buffer_group.attrs[2], buffer->attrs,