This change moves all iio_dev debugfs fields to the iio_dev_priv object.
It's not the biggest advantage yet (to the whole thing of abstractization)
but it's a start.

Signed-off-by: Alexandru Ardelean <alexandru.ardel...@analog.com>
---
 drivers/iio/industrialio-core.c | 40 ++++++++++++++++++++++-----------
 include/linux/iio/iio-opaque.h  | 10 +++++++++
 include/linux/iio/iio.h         | 13 +----------
 3 files changed, 38 insertions(+), 25 deletions(-)

diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-core.c
index 27005ba4d09c..05175cf80c98 100644
--- a/drivers/iio/industrialio-core.c
+++ b/drivers/iio/industrialio-core.c
@@ -165,6 +165,13 @@ static const char * const iio_chan_info_postfix[] = {
        [IIO_CHAN_INFO_THERMOCOUPLE_TYPE] = "thermocouple_type",
 };
 
+struct dentry *iio_get_debugfs_dentry(struct iio_dev *indio_dev)
+{
+       struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev);
+       return iio_dev_opaque->debugfs_dentry;
+}
+EXPORT_SYMBOL_GPL(iio_get_debugfs_dentry);
+
 /**
  * iio_find_channel_from_si() - get channel from its scan index
  * @indio_dev:         device
@@ -308,35 +315,37 @@ static ssize_t iio_debugfs_read_reg(struct file *file, 
char __user *userbuf,
                              size_t count, loff_t *ppos)
 {
        struct iio_dev *indio_dev = file->private_data;
+       struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev);
        unsigned val = 0;
        int ret;
 
        if (*ppos > 0)
                return simple_read_from_buffer(userbuf, count, ppos,
-                                              indio_dev->read_buf,
-                                              indio_dev->read_buf_len);
+                                              iio_dev_opaque->read_buf,
+                                              iio_dev_opaque->read_buf_len);
 
        ret = indio_dev->info->debugfs_reg_access(indio_dev,
-                                                 indio_dev->cached_reg_addr,
+                                                 
iio_dev_opaque->cached_reg_addr,
                                                  0, &val);
        if (ret) {
                dev_err(indio_dev->dev.parent, "%s: read failed\n", __func__);
                return ret;
        }
 
-       indio_dev->read_buf_len = snprintf(indio_dev->read_buf,
-                                          sizeof(indio_dev->read_buf),
-                                          "0x%X\n", val);
+       iio_dev_opaque->read_buf_len = snprintf(iio_dev_opaque->read_buf,
+                                             sizeof(iio_dev_opaque->read_buf),
+                                             "0x%X\n", val);
 
        return simple_read_from_buffer(userbuf, count, ppos,
-                                      indio_dev->read_buf,
-                                      indio_dev->read_buf_len);
+                                      iio_dev_opaque->read_buf,
+                                      iio_dev_opaque->read_buf_len);
 }
 
 static ssize_t iio_debugfs_write_reg(struct file *file,
                     const char __user *userbuf, size_t count, loff_t *ppos)
 {
        struct iio_dev *indio_dev = file->private_data;
+       struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev);
        unsigned reg, val;
        char buf[80];
        int ret;
@@ -351,10 +360,10 @@ static ssize_t iio_debugfs_write_reg(struct file *file,
 
        switch (ret) {
        case 1:
-               indio_dev->cached_reg_addr = reg;
+               iio_dev_opaque->cached_reg_addr = reg;
                break;
        case 2:
-               indio_dev->cached_reg_addr = reg;
+               iio_dev_opaque->cached_reg_addr = reg;
                ret = indio_dev->info->debugfs_reg_access(indio_dev, reg,
                                                          val, NULL);
                if (ret) {
@@ -378,23 +387,28 @@ static const struct file_operations iio_debugfs_reg_fops 
= {
 
 static void iio_device_unregister_debugfs(struct iio_dev *indio_dev)
 {
-       debugfs_remove_recursive(indio_dev->debugfs_dentry);
+       struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev);
+       debugfs_remove_recursive(iio_dev_opaque->debugfs_dentry);
 }
 
 static void iio_device_register_debugfs(struct iio_dev *indio_dev)
 {
+       struct iio_dev_opaque *iio_dev_opaque;
+
        if (indio_dev->info->debugfs_reg_access == NULL)
                return;
 
        if (!iio_debugfs_dentry)
                return;
 
-       indio_dev->debugfs_dentry =
+       iio_dev_opaque = to_iio_dev_opaque(indio_dev);
+
+       iio_dev_opaque->debugfs_dentry =
                debugfs_create_dir(dev_name(&indio_dev->dev),
                                   iio_debugfs_dentry);
 
        debugfs_create_file("direct_reg_access", 0644,
-                           indio_dev->debugfs_dentry, indio_dev,
+                           iio_dev_opaque->debugfs_dentry, indio_dev,
                            &iio_debugfs_reg_fops);
 }
 #else
diff --git a/include/linux/iio/iio-opaque.h b/include/linux/iio/iio-opaque.h
index 1375674f14cd..b3f234b4c1e9 100644
--- a/include/linux/iio/iio-opaque.h
+++ b/include/linux/iio/iio-opaque.h
@@ -6,9 +6,19 @@
 /**
  * struct iio_dev_opaque - industrial I/O device opaque information
  * @indio_dev:                 public industrial I/O device information
+ * @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
+ * @read_buf_len:              data length in @read_buf
  */
 struct iio_dev_opaque {
        struct iio_dev                  indio_dev;
+#if defined(CONFIG_DEBUG_FS)
+       struct dentry                   *debugfs_dentry;
+       unsigned                        cached_reg_addr;
+       char                            read_buf[20];
+       unsigned int                    read_buf_len;
+#endif
 };
 
 #define to_iio_dev_opaque(indio_dev)           \
diff --git a/include/linux/iio/iio.h b/include/linux/iio/iio.h
index 86112e35ae5f..bb0aae11a111 100644
--- a/include/linux/iio/iio.h
+++ b/include/linux/iio/iio.h
@@ -520,8 +520,6 @@ struct iio_buffer_setup_ops {
  * @groups:            [INTERN] attribute groups
  * @groupcounter:      [INTERN] index of next attribute group
  * @flags:             [INTERN] file ops related flags including busy flag.
- * @debugfs_dentry:    [INTERN] device specific debugfs dentry.
- * @cached_reg_addr:   [INTERN] cached register address for debugfs reads.
  * @priv:              [DRIVER] reference to driver's private information
  *                     **MUST** be accessed **ONLY** via iio_priv() helper
  */
@@ -567,12 +565,6 @@ struct iio_dev {
        int                             groupcounter;
 
        unsigned long                   flags;
-#if defined(CONFIG_DEBUG_FS)
-       struct dentry                   *debugfs_dentry;
-       unsigned                        cached_reg_addr;
-       char                            read_buf[20];
-       unsigned int                    read_buf_len;
-#endif
        void                            *priv;
 };
 
@@ -727,10 +719,7 @@ static inline bool iio_buffer_enabled(struct iio_dev 
*indio_dev)
  * @indio_dev:         IIO device structure for device
  **/
 #if defined(CONFIG_DEBUG_FS)
-static inline struct dentry *iio_get_debugfs_dentry(struct iio_dev *indio_dev)
-{
-       return indio_dev->debugfs_dentry;
-}
+struct dentry *iio_get_debugfs_dentry(struct iio_dev *indio_dev);
 #else
 static inline struct dentry *iio_get_debugfs_dentry(struct iio_dev *indio_dev)
 {
-- 
2.17.1

Reply via email to