mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-28 22:54:05 +08:00
iio: buffer: split buffer sysfs creation to take buffer as primary arg
Currently the iio_buffer_{alloc,free}_sysfs_and_mask() take 'indio_dev' as primary argument. This change splits the main logic into a private function that takes an IIO buffer as primary argument. That way, the functions can be extended to configure the sysfs for multiple buffers. Signed-off-by: Alexandru Ardelean <alexandru.ardelean@analog.com> Link: https://lore.kernel.org/r/20200917125951.861-1-alexandru.ardelean@analog.com Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
This commit is contained in:
parent
14b15f3f9c
commit
e16e0a778f
@ -1264,26 +1264,14 @@ static struct attribute *iio_buffer_attrs[] = {
|
||||
&dev_attr_data_available.attr,
|
||||
};
|
||||
|
||||
int iio_buffer_alloc_sysfs_and_mask(struct iio_dev *indio_dev)
|
||||
static int __iio_buffer_alloc_sysfs_and_mask(struct iio_buffer *buffer,
|
||||
struct iio_dev *indio_dev)
|
||||
{
|
||||
struct iio_dev_attr *p;
|
||||
struct attribute **attr;
|
||||
struct iio_buffer *buffer = indio_dev->buffer;
|
||||
int ret, i, attrn, attrcount;
|
||||
const struct iio_chan_spec *channels;
|
||||
|
||||
channels = indio_dev->channels;
|
||||
if (channels) {
|
||||
int ml = indio_dev->masklength;
|
||||
|
||||
for (i = 0; i < indio_dev->num_channels; i++)
|
||||
ml = max(ml, channels[i].scan_index + 1);
|
||||
indio_dev->masklength = ml;
|
||||
}
|
||||
|
||||
if (!buffer)
|
||||
return 0;
|
||||
|
||||
attrcount = 0;
|
||||
if (buffer->attrs) {
|
||||
while (buffer->attrs[attrcount] != NULL)
|
||||
@ -1367,6 +1355,35 @@ error_cleanup_dynamic:
|
||||
return ret;
|
||||
}
|
||||
|
||||
int iio_buffer_alloc_sysfs_and_mask(struct iio_dev *indio_dev)
|
||||
{
|
||||
struct iio_buffer *buffer = indio_dev->buffer;
|
||||
const struct iio_chan_spec *channels;
|
||||
int i;
|
||||
|
||||
channels = indio_dev->channels;
|
||||
if (channels) {
|
||||
int ml = indio_dev->masklength;
|
||||
|
||||
for (i = 0; i < indio_dev->num_channels; i++)
|
||||
ml = max(ml, channels[i].scan_index + 1);
|
||||
indio_dev->masklength = ml;
|
||||
}
|
||||
|
||||
if (!buffer)
|
||||
return 0;
|
||||
|
||||
return __iio_buffer_alloc_sysfs_and_mask(buffer, indio_dev);
|
||||
}
|
||||
|
||||
static void __iio_buffer_free_sysfs_and_mask(struct iio_buffer *buffer)
|
||||
{
|
||||
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);
|
||||
}
|
||||
|
||||
void iio_buffer_free_sysfs_and_mask(struct iio_dev *indio_dev)
|
||||
{
|
||||
struct iio_buffer *buffer = indio_dev->buffer;
|
||||
@ -1374,10 +1391,7 @@ void iio_buffer_free_sysfs_and_mask(struct iio_dev *indio_dev)
|
||||
if (!buffer)
|
||||
return;
|
||||
|
||||
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);
|
||||
__iio_buffer_free_sysfs_and_mask(buffer);
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
Reference in New Issue
Block a user