staging:iio: Buffer device flattening.
authorJonathan Cameron <jic23@cam.ac.uk>
Wed, 18 May 2011 13:40:57 +0000 (14:40 +0100)
committerGreg Kroah-Hartman <gregkh@suse.de>
Thu, 19 May 2011 23:06:12 +0000 (16:06 -0700)
Given we now only have one device we don't need the extra layer any more.
Hence this patch removes it.

Signed-off-by: Jonathan Cameron <jic23@cam.ac.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/staging/iio/industrialio-ring.c
drivers/staging/iio/ring_generic.h
drivers/staging/iio/ring_sw.c

index 559d613e7e187c6058bd6261040c8cb2216f1cab..625263e5982137f39bfc670a9e9741654a517e3a 100644 (file)
@@ -106,72 +106,60 @@ static const struct file_operations iio_ring_fileops = {
        .llseek = noop_llseek,
 };
 
-static void iio_ring_access_release(struct device *dev)
+void iio_ring_access_release(struct device *dev)
 {
        struct iio_ring_buffer *buf
-               = access_dev_to_iio_ring_buffer(dev);
+               = container_of(dev, struct iio_ring_buffer, dev);
        cdev_del(&buf->access_handler.chrdev);
        iio_device_free_chrdev_minor(MINOR(dev->devt));
 }
-
-static struct device_type iio_ring_access_type = {
-       .release = iio_ring_access_release,
-};
+EXPORT_SYMBOL(iio_ring_access_release);
 
 static inline int
-__iio_request_ring_buffer_access_chrdev(struct iio_ring_buffer *buf,
-                                       int id,
+__iio_request_ring_buffer_chrdev(struct iio_ring_buffer *buf,
                                        struct module *owner)
 {
        int ret, minor;
 
        buf->access_handler.flags = 0;
 
-       buf->access_dev.parent = &buf->dev;
-       buf->access_dev.bus = &iio_bus_type;
-       buf->access_dev.type = &iio_ring_access_type;
-       device_initialize(&buf->access_dev);
+       buf->dev.bus = &iio_bus_type;
+       device_initialize(&buf->dev);
 
        minor = iio_device_get_chrdev_minor();
        if (minor < 0) {
                ret = minor;
                goto error_device_put;
        }
-       buf->access_dev.devt = MKDEV(MAJOR(iio_devt), minor);
-
-
-       buf->access_id = id;
-
-       dev_set_name(&buf->access_dev, "%s:access%d",
-                    dev_name(&buf->dev),
-                    buf->access_id);
-       ret = device_add(&buf->access_dev);
+       buf->dev.devt = MKDEV(MAJOR(iio_devt), minor);
+       dev_set_name(&buf->dev, "%s:buffer%d",
+                    dev_name(buf->dev.parent),
+                    buf->id);
+       ret = device_add(&buf->dev);
        if (ret < 0) {
-               printk(KERN_ERR "failed to add the ring access dev\n");
+               printk(KERN_ERR "failed to add the ring dev\n");
                goto error_device_put;
        }
-
        cdev_init(&buf->access_handler.chrdev, &iio_ring_fileops);
        buf->access_handler.chrdev.owner = owner;
-
-       ret = cdev_add(&buf->access_handler.chrdev, buf->access_dev.devt, 1);
+       ret = cdev_add(&buf->access_handler.chrdev, buf->dev.devt, 1);
        if (ret) {
-               printk(KERN_ERR "failed to allocate ring access chrdev\n");
+               printk(KERN_ERR "failed to allocate ring chrdev\n");
                goto error_device_unregister;
        }
        return 0;
 
 error_device_unregister:
-       device_unregister(&buf->access_dev);
+       device_unregister(&buf->dev);
 error_device_put:
-       put_device(&buf->access_dev);
+       put_device(&buf->dev);
 
        return ret;
 }
 
-static void __iio_free_ring_buffer_access_chrdev(struct iio_ring_buffer *buf)
+static void __iio_free_ring_buffer_chrdev(struct iio_ring_buffer *buf)
 {
-       device_unregister(&buf->access_dev);
+       device_unregister(&buf->dev);
 }
 
 void iio_ring_buffer_init(struct iio_ring_buffer *ring,
@@ -344,36 +332,25 @@ int iio_ring_buffer_register_ex(struct iio_ring_buffer *ring, int id,
 
        ring->id = id;
 
-       dev_set_name(&ring->dev, "%s:buffer%d",
-                    dev_name(ring->dev.parent),
-                    ring->id);
-       ret = device_add(&ring->dev);
-       if (ret)
-               goto error_ret;
-
-       ret = __iio_request_ring_buffer_access_chrdev(ring,
-                                                     0,
-                                                     ring->owner);
+       ret = __iio_request_ring_buffer_chrdev(ring, ring->owner);
 
        if (ret)
-               goto error_remove_device;
-
+               goto error_ret;
        if (ring->scan_el_attrs) {
                ret = sysfs_create_group(&ring->dev.kobj,
                                         ring->scan_el_attrs);
                if (ret) {
                        dev_err(&ring->dev,
                                "Failed to add sysfs scan elements\n");
-                       goto error_free_ring_buffer_access_chrdev;
+                       goto error_free_ring_buffer_chrdev;
                }
        } else if (channels) {
                ret = sysfs_create_group(&ring->dev.kobj,
                                         &iio_scan_el_dummy_group);
                if (ret)
-                       goto error_free_ring_buffer_access_chrdev;
+                       goto error_free_ring_buffer_chrdev;
        }
 
-
        INIT_LIST_HEAD(&ring->scan_el_dev_attr_list);
        INIT_LIST_HEAD(&ring->scan_el_en_attr_list);
        if (channels) {
@@ -388,10 +365,8 @@ int iio_ring_buffer_register_ex(struct iio_ring_buffer *ring, int id,
        return 0;
 error_cleanup_dynamic:
        __iio_ring_attr_cleanup(ring);
-error_free_ring_buffer_access_chrdev:
-       __iio_free_ring_buffer_access_chrdev(ring);
-error_remove_device:
-       device_del(&ring->dev);
+error_free_ring_buffer_chrdev:
+       __iio_free_ring_buffer_chrdev(ring);
 error_ret:
        return ret;
 }
@@ -406,8 +381,7 @@ EXPORT_SYMBOL(iio_ring_buffer_register);
 void iio_ring_buffer_unregister(struct iio_ring_buffer *ring)
 {
        __iio_ring_attr_cleanup(ring);
-       __iio_free_ring_buffer_access_chrdev(ring);
-       device_del(&ring->dev);
+       __iio_free_ring_buffer_chrdev(ring);
 }
 EXPORT_SYMBOL(iio_ring_buffer_unregister);
 
index 3a1a872c43fb9c2717a36dd12633d8230e486055..91f10378d04cb385e50158287ea98ecee0d2acde 100644 (file)
@@ -68,11 +68,9 @@ struct iio_ring_access_funcs {
 /**
  * struct iio_ring_buffer - general ring buffer structure
  * @dev:               ring buffer device struct
- * @access_dev:                system device struct for the chrdev
  * @indio_dev:         industrial I/O device structure
  * @owner:             module that owns the ring buffer (for ref counting)
  * @id:                        unique id number
- * @access_id:         device id number
  * @length:            [DEVICE] number of datums in ring
  * @bytes_per_datum:   [DEVICE] size of individual datum including timestamp
  * @bpe:               [DEVICE] size of individual channel value
@@ -92,11 +90,9 @@ struct iio_ring_access_funcs {
   **/
 struct iio_ring_buffer {
        struct device dev;
-       struct device access_dev;
        struct iio_dev *indio_dev;
        struct module *owner;
        int                             id;
-       int                             access_id;
        int                             length;
        int                             bytes_per_datum;
        int                             bpe;
@@ -398,8 +394,6 @@ static inline void iio_put_ring_buffer(struct iio_ring_buffer *ring)
 
 #define to_iio_ring_buffer(d)                  \
        container_of(d, struct iio_ring_buffer, dev)
-#define access_dev_to_iio_ring_buffer(d)                       \
-       container_of(d, struct iio_ring_buffer, access_dev)
 
 /**
  * iio_ring_buffer_register() - register the buffer with IIO core
@@ -416,6 +410,8 @@ int iio_ring_buffer_register_ex(struct iio_ring_buffer *ring, int id,
                                const struct iio_chan_spec *channels,
                                int num_channels);
 
+void iio_ring_access_release(struct device *dev);
+
 /**
  * iio_ring_buffer_unregister() - unregister the buffer from IIO core
  * @ring: the buffer to be unregistered
index a429a3d4a461e47cea4f7fd70480a45d7ac5cf6e..5fbf5ff9c898dbe0ea0e8d70cc5b95123ef7b2dd 100644 (file)
@@ -375,6 +375,7 @@ EXPORT_SYMBOL(iio_mark_update_needed_sw_rb);
 static void iio_sw_rb_release(struct device *dev)
 {
        struct iio_ring_buffer *r = to_iio_ring_buffer(dev);
+       iio_ring_access_release(&r->dev);
        kfree(iio_to_sw_ring(r));
 }
 
@@ -416,9 +417,7 @@ struct iio_ring_buffer *iio_sw_rb_allocate(struct iio_dev *indio_dev)
        iio_ring_buffer_init(buf, indio_dev);
        __iio_init_sw_ring_buffer(ring);
        buf->dev.type = &iio_sw_ring_type;
-       device_initialize(&buf->dev);
        buf->dev.parent = &indio_dev->dev;
-       buf->dev.bus = &iio_bus_type;
        dev_set_drvdata(&buf->dev, (void *)buf);
 
        return buf;