This change makes it so that the first buffer directory is named 'buffer0'
and moves the 'scan_elements' under it.

For backwards compatibility these folders are symlinked back to the
original folders.

Signed-off-by: Alexandru Ardelean <alexandru.ardel...@analog.com>
---
 drivers/iio/industrialio-buffer.c | 38 +++++++++++++++++++++++++++----
 1 file changed, 33 insertions(+), 5 deletions(-)

diff --git a/drivers/iio/industrialio-buffer.c 
b/drivers/iio/industrialio-buffer.c
index 8b31faf049a5..62c8bd6b67cd 100644
--- a/drivers/iio/industrialio-buffer.c
+++ b/drivers/iio/industrialio-buffer.c
@@ -1346,7 +1346,8 @@ static void iio_sysfs_del_attrs(struct kobject *kobj, 
struct attribute **ptr)
 }
 
 static int __iio_buffer_alloc_sysfs_and_mask(struct iio_buffer *buffer,
-                                            struct iio_dev *indio_dev)
+                                            struct iio_dev *indio_dev,
+                                            unsigned int idx)
 {
        struct iio_dev_attr *p;
        struct attribute **attr;
@@ -1378,7 +1379,7 @@ static int __iio_buffer_alloc_sysfs_and_mask(struct 
iio_buffer *buffer,
        buffer->buffer_attrs = attr;
 
        ret = kobject_init_and_add(&buffer->buffer_dir, &iio_buffer_dir_ktype,
-                                  &indio_dev->dev.kobj, "buffer");
+                                  &indio_dev->dev.kobj, "buffer%u", idx);
        if (ret)
                goto error_buffer_free_attrs;
 
@@ -1423,7 +1424,7 @@ static int __iio_buffer_alloc_sysfs_and_mask(struct 
iio_buffer *buffer,
        }
 
        ret = kobject_init_and_add(&buffer->scan_el_dir, &iio_scan_el_dir_ktype,
-                                  &indio_dev->dev.kobj, "scan_elements");
+                                  &buffer->buffer_dir, "scan_elements");
        if (ret)
                goto error_free_scan_attrs;
 
@@ -1454,11 +1455,13 @@ static int __iio_buffer_alloc_sysfs_and_mask(struct 
iio_buffer *buffer,
        return ret;
 }
 
+static void __iio_buffer_free_sysfs_and_mask(struct iio_buffer *buffer);
+
 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;
+       int i, ret;
 
        channels = indio_dev->channels;
        if (channels) {
@@ -1472,7 +1475,29 @@ int iio_buffer_alloc_sysfs_and_mask(struct iio_dev 
*indio_dev)
        if (!buffer)
                return 0;
 
-       return __iio_buffer_alloc_sysfs_and_mask(buffer, indio_dev);
+       ret = __iio_buffer_alloc_sysfs_and_mask(buffer, indio_dev, 0);
+       if (ret)
+               return ret;
+
+       ret = sysfs_create_link(&indio_dev->dev.kobj,
+                               &indio_dev->buffer->buffer_dir,
+                               "buffer");
+       if (ret)
+               goto error_free_sysfs_and_mask;
+
+       ret = sysfs_create_link(&indio_dev->dev.kobj,
+                               &indio_dev->buffer->scan_el_dir,
+                               "scan_elements");
+       if (ret)
+               goto error_remove_buffer_dir_link;
+
+       return 0;
+
+error_remove_buffer_dir_link:
+       sysfs_remove_link(&indio_dev->dev.kobj, "buffer");
+error_free_sysfs_and_mask:
+       __iio_buffer_free_sysfs_and_mask(buffer);
+       return ret;
 }
 
 static void __iio_buffer_free_sysfs_and_mask(struct iio_buffer *buffer)
@@ -1494,6 +1519,9 @@ void iio_buffer_free_sysfs_and_mask(struct iio_dev 
*indio_dev)
        if (!buffer)
                return;
 
+       sysfs_remove_link(&indio_dev->dev.kobj, "scan_elements");
+       sysfs_remove_link(&indio_dev->dev.kobj, "buffer");
+
        __iio_buffer_free_sysfs_and_mask(buffer);
 }
 
-- 
2.17.1

Reply via email to