Commit ff3f7e04 authored by Alexandru Ardelean's avatar Alexandru Ardelean Committed by Jonathan Cameron

iio: buffer: extend short-hand use for 'indio_dev->buffer'

This change is both cosmetic and a prequel to adding support for attaching
multiple buffers per IIO device.

The IIO buffer sysfs attrs are mostly designed to support only one attached
buffer, and in order to support more, we need to centralize [in each attr
function] the buffer which is being accessed.

This also makes it a bit more uniform, as in some functions there is a
short-hand 'buffer' variable and at the same time the 'indio_dev->buffer'
is still access directly.
Signed-off-by: default avatarAlexandru Ardelean <alexandru.ardelean@analog.com>
Signed-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
parent 256d4b83
...@@ -189,10 +189,12 @@ __poll_t iio_buffer_poll(struct file *filp, ...@@ -189,10 +189,12 @@ __poll_t iio_buffer_poll(struct file *filp,
*/ */
void iio_buffer_wakeup_poll(struct iio_dev *indio_dev) void iio_buffer_wakeup_poll(struct iio_dev *indio_dev)
{ {
if (!indio_dev->buffer) struct iio_buffer *buffer = indio_dev->buffer;
if (!buffer)
return; return;
wake_up(&indio_dev->buffer->pollq); wake_up(&buffer->pollq);
} }
void iio_buffer_init(struct iio_buffer *buffer) void iio_buffer_init(struct iio_buffer *buffer)
...@@ -262,10 +264,11 @@ static ssize_t iio_scan_el_show(struct device *dev, ...@@ -262,10 +264,11 @@ static ssize_t iio_scan_el_show(struct device *dev,
{ {
int ret; int ret;
struct iio_dev *indio_dev = dev_to_iio_dev(dev); struct iio_dev *indio_dev = dev_to_iio_dev(dev);
struct iio_buffer *buffer = indio_dev->buffer;
/* Ensure ret is 0 or 1. */ /* Ensure ret is 0 or 1. */
ret = !!test_bit(to_iio_dev_attr(attr)->address, ret = !!test_bit(to_iio_dev_attr(attr)->address,
indio_dev->buffer->scan_mask); buffer->scan_mask);
return sprintf(buf, "%d\n", ret); return sprintf(buf, "%d\n", ret);
} }
...@@ -381,7 +384,7 @@ static ssize_t iio_scan_el_store(struct device *dev, ...@@ -381,7 +384,7 @@ static ssize_t iio_scan_el_store(struct device *dev,
if (ret < 0) if (ret < 0)
return ret; return ret;
mutex_lock(&indio_dev->mlock); mutex_lock(&indio_dev->mlock);
if (iio_buffer_is_active(indio_dev->buffer)) { if (iio_buffer_is_active(buffer)) {
ret = -EBUSY; ret = -EBUSY;
goto error_ret; goto error_ret;
} }
...@@ -410,7 +413,9 @@ static ssize_t iio_scan_el_ts_show(struct device *dev, ...@@ -410,7 +413,9 @@ static ssize_t iio_scan_el_ts_show(struct device *dev,
char *buf) char *buf)
{ {
struct iio_dev *indio_dev = dev_to_iio_dev(dev); struct iio_dev *indio_dev = dev_to_iio_dev(dev);
return sprintf(buf, "%d\n", indio_dev->buffer->scan_timestamp); struct iio_buffer *buffer = indio_dev->buffer;
return sprintf(buf, "%d\n", buffer->scan_timestamp);
} }
static ssize_t iio_scan_el_ts_store(struct device *dev, static ssize_t iio_scan_el_ts_store(struct device *dev,
...@@ -420,6 +425,7 @@ static ssize_t iio_scan_el_ts_store(struct device *dev, ...@@ -420,6 +425,7 @@ static ssize_t iio_scan_el_ts_store(struct device *dev,
{ {
int ret; int ret;
struct iio_dev *indio_dev = dev_to_iio_dev(dev); struct iio_dev *indio_dev = dev_to_iio_dev(dev);
struct iio_buffer *buffer = indio_dev->buffer;
bool state; bool state;
ret = strtobool(buf, &state); ret = strtobool(buf, &state);
...@@ -427,11 +433,11 @@ static ssize_t iio_scan_el_ts_store(struct device *dev, ...@@ -427,11 +433,11 @@ static ssize_t iio_scan_el_ts_store(struct device *dev,
return ret; return ret;
mutex_lock(&indio_dev->mlock); mutex_lock(&indio_dev->mlock);
if (iio_buffer_is_active(indio_dev->buffer)) { if (iio_buffer_is_active(buffer)) {
ret = -EBUSY; ret = -EBUSY;
goto error_ret; goto error_ret;
} }
indio_dev->buffer->scan_timestamp = state; buffer->scan_timestamp = state;
error_ret: error_ret:
mutex_unlock(&indio_dev->mlock); mutex_unlock(&indio_dev->mlock);
...@@ -439,10 +445,10 @@ static ssize_t iio_scan_el_ts_store(struct device *dev, ...@@ -439,10 +445,10 @@ static ssize_t iio_scan_el_ts_store(struct device *dev,
} }
static int iio_buffer_add_channel_sysfs(struct iio_dev *indio_dev, static int iio_buffer_add_channel_sysfs(struct iio_dev *indio_dev,
struct iio_buffer *buffer,
const struct iio_chan_spec *chan) const struct iio_chan_spec *chan)
{ {
int ret, attrcount = 0; int ret, attrcount = 0;
struct iio_buffer *buffer = indio_dev->buffer;
ret = __iio_add_chan_devattr("index", ret = __iio_add_chan_devattr("index",
chan, chan,
...@@ -518,7 +524,7 @@ static ssize_t iio_buffer_write_length(struct device *dev, ...@@ -518,7 +524,7 @@ static ssize_t iio_buffer_write_length(struct device *dev,
return len; return len;
mutex_lock(&indio_dev->mlock); mutex_lock(&indio_dev->mlock);
if (iio_buffer_is_active(indio_dev->buffer)) { if (iio_buffer_is_active(buffer)) {
ret = -EBUSY; ret = -EBUSY;
} else { } else {
buffer->access->set_length(buffer, val); buffer->access->set_length(buffer, val);
...@@ -539,7 +545,9 @@ static ssize_t iio_buffer_show_enable(struct device *dev, ...@@ -539,7 +545,9 @@ static ssize_t iio_buffer_show_enable(struct device *dev,
char *buf) char *buf)
{ {
struct iio_dev *indio_dev = dev_to_iio_dev(dev); struct iio_dev *indio_dev = dev_to_iio_dev(dev);
return sprintf(buf, "%d\n", iio_buffer_is_active(indio_dev->buffer)); struct iio_buffer *buffer = indio_dev->buffer;
return sprintf(buf, "%d\n", iio_buffer_is_active(buffer));
} }
static unsigned int iio_storage_bytes_for_si(struct iio_dev *indio_dev, static unsigned int iio_storage_bytes_for_si(struct iio_dev *indio_dev,
...@@ -1129,6 +1137,7 @@ static ssize_t iio_buffer_store_enable(struct device *dev, ...@@ -1129,6 +1137,7 @@ static ssize_t iio_buffer_store_enable(struct device *dev,
int ret; int ret;
bool requested_state; bool requested_state;
struct iio_dev *indio_dev = dev_to_iio_dev(dev); struct iio_dev *indio_dev = dev_to_iio_dev(dev);
struct iio_buffer *buffer = indio_dev->buffer;
bool inlist; bool inlist;
ret = strtobool(buf, &requested_state); ret = strtobool(buf, &requested_state);
...@@ -1138,17 +1147,15 @@ static ssize_t iio_buffer_store_enable(struct device *dev, ...@@ -1138,17 +1147,15 @@ static ssize_t iio_buffer_store_enable(struct device *dev,
mutex_lock(&indio_dev->mlock); mutex_lock(&indio_dev->mlock);
/* Find out if it is in the list */ /* Find out if it is in the list */
inlist = iio_buffer_is_active(indio_dev->buffer); inlist = iio_buffer_is_active(buffer);
/* Already in desired state */ /* Already in desired state */
if (inlist == requested_state) if (inlist == requested_state)
goto done; goto done;
if (requested_state) if (requested_state)
ret = __iio_update_buffers(indio_dev, ret = __iio_update_buffers(indio_dev, buffer, NULL);
indio_dev->buffer, NULL);
else else
ret = __iio_update_buffers(indio_dev, ret = __iio_update_buffers(indio_dev, NULL, buffer);
NULL, indio_dev->buffer);
done: done:
mutex_unlock(&indio_dev->mlock); mutex_unlock(&indio_dev->mlock);
...@@ -1190,7 +1197,7 @@ static ssize_t iio_buffer_store_watermark(struct device *dev, ...@@ -1190,7 +1197,7 @@ static ssize_t iio_buffer_store_watermark(struct device *dev,
goto out; goto out;
} }
if (iio_buffer_is_active(indio_dev->buffer)) { if (iio_buffer_is_active(buffer)) {
ret = -EBUSY; ret = -EBUSY;
goto out; goto out;
} }
...@@ -1207,11 +1214,9 @@ static ssize_t iio_dma_show_data_available(struct device *dev, ...@@ -1207,11 +1214,9 @@ static ssize_t iio_dma_show_data_available(struct device *dev,
char *buf) char *buf)
{ {
struct iio_dev *indio_dev = dev_to_iio_dev(dev); struct iio_dev *indio_dev = dev_to_iio_dev(dev);
size_t bytes; struct iio_buffer *buffer = indio_dev->buffer;
bytes = iio_buffer_data_available(indio_dev->buffer);
return sprintf(buf, "%zu\n", bytes); return sprintf(buf, "%zu\n", iio_buffer_data_available(buffer));
} }
static DEVICE_ATTR(length, S_IRUGO | S_IWUSR, iio_buffer_read_length, static DEVICE_ATTR(length, S_IRUGO | S_IWUSR, iio_buffer_read_length,
...@@ -1292,7 +1297,7 @@ int iio_buffer_alloc_sysfs_and_mask(struct iio_dev *indio_dev) ...@@ -1292,7 +1297,7 @@ int iio_buffer_alloc_sysfs_and_mask(struct iio_dev *indio_dev)
if (channels[i].scan_index < 0) if (channels[i].scan_index < 0)
continue; continue;
ret = iio_buffer_add_channel_sysfs(indio_dev, ret = iio_buffer_add_channel_sysfs(indio_dev, buffer,
&channels[i]); &channels[i]);
if (ret < 0) if (ret < 0)
goto error_cleanup_dynamic; goto error_cleanup_dynamic;
...@@ -1332,20 +1337,22 @@ int iio_buffer_alloc_sysfs_and_mask(struct iio_dev *indio_dev) ...@@ -1332,20 +1337,22 @@ int iio_buffer_alloc_sysfs_and_mask(struct iio_dev *indio_dev)
bitmap_free(buffer->scan_mask); bitmap_free(buffer->scan_mask);
error_cleanup_dynamic: error_cleanup_dynamic:
iio_free_chan_devattr_list(&buffer->scan_el_dev_attr_list); iio_free_chan_devattr_list(&buffer->scan_el_dev_attr_list);
kfree(indio_dev->buffer->buffer_group.attrs); kfree(buffer->buffer_group.attrs);
return ret; return ret;
} }
void iio_buffer_free_sysfs_and_mask(struct iio_dev *indio_dev) void iio_buffer_free_sysfs_and_mask(struct iio_dev *indio_dev)
{ {
if (!indio_dev->buffer) struct iio_buffer *buffer = indio_dev->buffer;
if (!buffer)
return; return;
bitmap_free(indio_dev->buffer->scan_mask); bitmap_free(buffer->scan_mask);
kfree(indio_dev->buffer->buffer_group.attrs); kfree(buffer->buffer_group.attrs);
kfree(indio_dev->buffer->scan_el_group.attrs); kfree(buffer->scan_el_group.attrs);
iio_free_chan_devattr_list(&indio_dev->buffer->scan_el_dev_attr_list); iio_free_chan_devattr_list(&buffer->scan_el_dev_attr_list);
} }
/** /**
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment