mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-24 15:20:58 +07:00
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: Alexandru Ardelean <alexandru.ardelean@analog.com> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
This commit is contained in:
parent
256d4b83c0
commit
ff3f7e049a
@ -189,10 +189,12 @@ __poll_t iio_buffer_poll(struct file *filp,
|
||||
*/
|
||||
void iio_buffer_wakeup_poll(struct iio_dev *indio_dev)
|
||||
{
|
||||
if (!indio_dev->buffer)
|
||||
struct iio_buffer *buffer = indio_dev->buffer;
|
||||
|
||||
if (!buffer)
|
||||
return;
|
||||
|
||||
wake_up(&indio_dev->buffer->pollq);
|
||||
wake_up(&buffer->pollq);
|
||||
}
|
||||
|
||||
void iio_buffer_init(struct iio_buffer *buffer)
|
||||
@ -262,10 +264,11 @@ static ssize_t iio_scan_el_show(struct device *dev,
|
||||
{
|
||||
int ret;
|
||||
struct iio_dev *indio_dev = dev_to_iio_dev(dev);
|
||||
struct iio_buffer *buffer = indio_dev->buffer;
|
||||
|
||||
/* Ensure ret is 0 or 1. */
|
||||
ret = !!test_bit(to_iio_dev_attr(attr)->address,
|
||||
indio_dev->buffer->scan_mask);
|
||||
buffer->scan_mask);
|
||||
|
||||
return sprintf(buf, "%d\n", ret);
|
||||
}
|
||||
@ -381,7 +384,7 @@ static ssize_t iio_scan_el_store(struct device *dev,
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
mutex_lock(&indio_dev->mlock);
|
||||
if (iio_buffer_is_active(indio_dev->buffer)) {
|
||||
if (iio_buffer_is_active(buffer)) {
|
||||
ret = -EBUSY;
|
||||
goto error_ret;
|
||||
}
|
||||
@ -410,7 +413,9 @@ static ssize_t iio_scan_el_ts_show(struct device *dev,
|
||||
char *buf)
|
||||
{
|
||||
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,
|
||||
@ -420,6 +425,7 @@ static ssize_t iio_scan_el_ts_store(struct device *dev,
|
||||
{
|
||||
int ret;
|
||||
struct iio_dev *indio_dev = dev_to_iio_dev(dev);
|
||||
struct iio_buffer *buffer = indio_dev->buffer;
|
||||
bool state;
|
||||
|
||||
ret = strtobool(buf, &state);
|
||||
@ -427,11 +433,11 @@ static ssize_t iio_scan_el_ts_store(struct device *dev,
|
||||
return ret;
|
||||
|
||||
mutex_lock(&indio_dev->mlock);
|
||||
if (iio_buffer_is_active(indio_dev->buffer)) {
|
||||
if (iio_buffer_is_active(buffer)) {
|
||||
ret = -EBUSY;
|
||||
goto error_ret;
|
||||
}
|
||||
indio_dev->buffer->scan_timestamp = state;
|
||||
buffer->scan_timestamp = state;
|
||||
error_ret:
|
||||
mutex_unlock(&indio_dev->mlock);
|
||||
|
||||
@ -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,
|
||||
struct iio_buffer *buffer,
|
||||
const struct iio_chan_spec *chan)
|
||||
{
|
||||
int ret, attrcount = 0;
|
||||
struct iio_buffer *buffer = indio_dev->buffer;
|
||||
|
||||
ret = __iio_add_chan_devattr("index",
|
||||
chan,
|
||||
@ -518,7 +524,7 @@ static ssize_t iio_buffer_write_length(struct device *dev,
|
||||
return len;
|
||||
|
||||
mutex_lock(&indio_dev->mlock);
|
||||
if (iio_buffer_is_active(indio_dev->buffer)) {
|
||||
if (iio_buffer_is_active(buffer)) {
|
||||
ret = -EBUSY;
|
||||
} else {
|
||||
buffer->access->set_length(buffer, val);
|
||||
@ -539,7 +545,9 @@ static ssize_t iio_buffer_show_enable(struct device *dev,
|
||||
char *buf)
|
||||
{
|
||||
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,
|
||||
@ -1129,6 +1137,7 @@ static ssize_t iio_buffer_store_enable(struct device *dev,
|
||||
int ret;
|
||||
bool requested_state;
|
||||
struct iio_dev *indio_dev = dev_to_iio_dev(dev);
|
||||
struct iio_buffer *buffer = indio_dev->buffer;
|
||||
bool inlist;
|
||||
|
||||
ret = strtobool(buf, &requested_state);
|
||||
@ -1138,17 +1147,15 @@ static ssize_t iio_buffer_store_enable(struct device *dev,
|
||||
mutex_lock(&indio_dev->mlock);
|
||||
|
||||
/* 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 */
|
||||
if (inlist == requested_state)
|
||||
goto done;
|
||||
|
||||
if (requested_state)
|
||||
ret = __iio_update_buffers(indio_dev,
|
||||
indio_dev->buffer, NULL);
|
||||
ret = __iio_update_buffers(indio_dev, buffer, NULL);
|
||||
else
|
||||
ret = __iio_update_buffers(indio_dev,
|
||||
NULL, indio_dev->buffer);
|
||||
ret = __iio_update_buffers(indio_dev, NULL, buffer);
|
||||
|
||||
done:
|
||||
mutex_unlock(&indio_dev->mlock);
|
||||
@ -1190,7 +1197,7 @@ static ssize_t iio_buffer_store_watermark(struct device *dev,
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (iio_buffer_is_active(indio_dev->buffer)) {
|
||||
if (iio_buffer_is_active(buffer)) {
|
||||
ret = -EBUSY;
|
||||
goto out;
|
||||
}
|
||||
@ -1207,11 +1214,9 @@ static ssize_t iio_dma_show_data_available(struct device *dev,
|
||||
char *buf)
|
||||
{
|
||||
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,
|
||||
@ -1292,7 +1297,7 @@ int iio_buffer_alloc_sysfs_and_mask(struct iio_dev *indio_dev)
|
||||
if (channels[i].scan_index < 0)
|
||||
continue;
|
||||
|
||||
ret = iio_buffer_add_channel_sysfs(indio_dev,
|
||||
ret = iio_buffer_add_channel_sysfs(indio_dev, buffer,
|
||||
&channels[i]);
|
||||
if (ret < 0)
|
||||
goto error_cleanup_dynamic;
|
||||
@ -1332,20 +1337,22 @@ int iio_buffer_alloc_sysfs_and_mask(struct iio_dev *indio_dev)
|
||||
bitmap_free(buffer->scan_mask);
|
||||
error_cleanup_dynamic:
|
||||
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;
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
bitmap_free(indio_dev->buffer->scan_mask);
|
||||
kfree(indio_dev->buffer->buffer_group.attrs);
|
||||
kfree(indio_dev->buffer->scan_el_group.attrs);
|
||||
iio_free_chan_devattr_list(&indio_dev->buffer->scan_el_dev_attr_list);
|
||||
bitmap_free(buffer->scan_mask);
|
||||
kfree(buffer->buffer_group.attrs);
|
||||
kfree(buffer->scan_el_group.attrs);
|
||||
iio_free_chan_devattr_list(&buffer->scan_el_dev_attr_list);
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
Reference in New Issue
Block a user