iio: core: move @chrdev from struct iio_dev to struct iio_dev_opaque
authorJonathan Cameron <Jonathan.Cameron@huawei.com>
Mon, 26 Apr 2021 17:49:09 +0000 (18:49 +0100)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Mon, 17 May 2021 12:54:17 +0000 (13:54 +0100)
No reason for this to be exposed to the drivers, so lets move it to the
opaque structure.

Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Reviewed-by: Alexandru Ardelean <ardeleanalex@gmail.com>
Link: https://lore.kernel.org/r/20210426174911.397061-8-jic23@kernel.org
drivers/iio/industrialio-core.c
include/linux/iio/iio-opaque.h
include/linux/iio/iio.h

index 74bb977e235707c7f0ec0de3c6ee43b710431ef2..0aba0a0085eb88dcf8800fcdbfd2abcd662b52eb 100644 (file)
@@ -1715,8 +1715,9 @@ EXPORT_SYMBOL_GPL(devm_iio_device_alloc);
  **/
 static int iio_chrdev_open(struct inode *inode, struct file *filp)
 {
-       struct iio_dev *indio_dev = container_of(inode->i_cdev,
-                                               struct iio_dev, chrdev);
+       struct iio_dev_opaque *iio_dev_opaque =
+               container_of(inode->i_cdev, struct iio_dev_opaque, chrdev);
+       struct iio_dev *indio_dev = &iio_dev_opaque->indio_dev;
        struct iio_dev_buffer_pair *ib;
 
        if (test_and_set_bit(IIO_BUSY_BIT_POS, &indio_dev->flags))
@@ -1749,8 +1750,9 @@ static int iio_chrdev_open(struct inode *inode, struct file *filp)
 static int iio_chrdev_release(struct inode *inode, struct file *filp)
 {
        struct iio_dev_buffer_pair *ib = filp->private_data;
-       struct iio_dev *indio_dev = container_of(inode->i_cdev,
-                                               struct iio_dev, chrdev);
+       struct iio_dev_opaque *iio_dev_opaque =
+               container_of(inode->i_cdev, struct iio_dev_opaque, chrdev);
+       struct iio_dev *indio_dev = &iio_dev_opaque->indio_dev;
        kfree(ib);
        clear_bit(IIO_BUSY_BIT_POS, &indio_dev->flags);
        iio_device_put(indio_dev);
@@ -1900,19 +1902,19 @@ int __iio_device_register(struct iio_dev *indio_dev, struct module *this_mod)
                indio_dev->setup_ops = &noop_ring_setup_ops;
 
        if (iio_dev_opaque->attached_buffers_cnt)
-               cdev_init(&indio_dev->chrdev, &iio_buffer_fileops);
+               cdev_init(&iio_dev_opaque->chrdev, &iio_buffer_fileops);
        else if (iio_dev_opaque->event_interface)
-               cdev_init(&indio_dev->chrdev, &iio_event_fileops);
+               cdev_init(&iio_dev_opaque->chrdev, &iio_event_fileops);
 
        if (iio_dev_opaque->attached_buffers_cnt || iio_dev_opaque->event_interface) {
                indio_dev->dev.devt = MKDEV(MAJOR(iio_devt), iio_dev_opaque->id);
-               indio_dev->chrdev.owner = this_mod;
+               iio_dev_opaque->chrdev.owner = this_mod;
        }
 
        /* assign device groups now; they should be all registered now */
        indio_dev->dev.groups = iio_dev_opaque->groups;
 
-       ret = cdev_device_add(&indio_dev->chrdev, &indio_dev->dev);
+       ret = cdev_device_add(&iio_dev_opaque->chrdev, &indio_dev->dev);
        if (ret < 0)
                goto error_unreg_eventset;
 
@@ -1936,7 +1938,9 @@ EXPORT_SYMBOL(__iio_device_register);
  **/
 void iio_device_unregister(struct iio_dev *indio_dev)
 {
-       cdev_device_del(&indio_dev->chrdev, &indio_dev->dev);
+       struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev);
+
+       cdev_device_del(&iio_dev_opaque->chrdev, &indio_dev->dev);
 
        mutex_lock(&iio_dev_opaque->info_exist_lock);
 
index 538b4b5ef1a9c5c3908c72acf3a58a3815667e11..2f8ef5d15a662a50a2fa18fdb83560f3d837a6f5 100644 (file)
@@ -24,6 +24,7 @@
  * @legacy_scan_el_group:      attribute group for legacy scan elements attribute group
  * @legacy_buffer_group:       attribute group for legacy buffer attributes group
  * @scan_index_timestamp:      cache of the index to the timestamp
+ * @chrdev:                    associated character device
  * @debugfs_dentry:            device specific debugfs dentry
  * @cached_reg_addr:           cached register address for debugfs reads
  * @read_buf:                  read buffer to be used for the initial reg read
@@ -49,6 +50,7 @@ struct iio_dev_opaque {
        struct attribute_group          legacy_buffer_group;
 
        unsigned int                    scan_index_timestamp;
+       struct cdev                     chrdev;
 
 #if defined(CONFIG_DEBUG_FS)
        struct dentry                   *debugfs_dentry;
index a12bbd8b1e745ed42f818e4d04d15a350a60287c..586e2dc4fbf372620ed5cfda996ecc803526a9c4 100644 (file)
@@ -512,7 +512,6 @@ struct iio_buffer_setup_ops {
  * @clock_id:          [INTERN] timestamping clock posix identifier
  * @setup_ops:         [DRIVER] callbacks to call before and after buffer
  *                     enable/disable
- * @chrdev:            [INTERN] associated character device
  * @flags:             [INTERN] file ops related flags including busy flag.
  * @priv:              [DRIVER] reference to driver's private information
  *                     **MUST** be accessed **ONLY** via iio_priv() helper
@@ -542,7 +541,6 @@ struct iio_dev {
        const struct iio_info           *info;
        clockid_t                       clock_id;
        const struct iio_buffer_setup_ops       *setup_ops;
-       struct cdev                     chrdev;
 
        unsigned long                   flags;
        void                            *priv;