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/iio_core.h          | 10 +++++++++
 drivers/iio/industrialio-core.c | 40 ++++++++++++++++++++++-----------
 include/linux/iio/iio.h         | 13 +----------
 3 files changed, 38 insertions(+), 25 deletions(-)

diff --git a/drivers/iio/iio_core.h b/drivers/iio/iio_core.h
index 84f3b4590c05..bc9f580d2bdd 100644
--- a/drivers/iio/iio_core.h
+++ b/drivers/iio/iio_core.h
@@ -20,9 +20,19 @@ extern struct device_type iio_device_type;
 /**
  * struct iio_dev_priv - industrial I/O device private information
  * @indio_dev:                 public IIO device object
+ * @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_priv {
        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_priv(indio_dev)     \
diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-core.c
index b924197b5984..091ae79de751 100644
--- a/drivers/iio/industrialio-core.c
+++ b/drivers/iio/industrialio-core.c
@@ -181,6 +181,13 @@ struct iio_dev *iio_priv_to_dev(void *priv)
 }
 EXPORT_SYMBOL_GPL(iio_priv_to_dev);
 
+struct dentry *iio_get_debugfs_dentry(struct iio_dev *indio_dev)
+{
+       struct iio_dev_priv *iio_dev_priv = to_iio_dev_priv(indio_dev);
+       return iio_dev_priv->debugfs_dentry;
+}
+EXPORT_SYMBOL_GPL(iio_get_debugfs_dentry);
+
 /**
  * iio_find_channel_from_si() - get channel from its scan index
  * @indio_dev:         device
@@ -324,35 +331,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_priv *iio_dev_priv = to_iio_dev_priv(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_priv->read_buf,
+                                              iio_dev_priv->read_buf_len);
 
        ret = indio_dev->info->debugfs_reg_access(indio_dev,
-                                                 indio_dev->cached_reg_addr,
+                                                 iio_dev_priv->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_priv->read_buf_len = snprintf(iio_dev_priv->read_buf,
+                                             sizeof(iio_dev_priv->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_priv->read_buf,
+                                      iio_dev_priv->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_priv *iio_dev_priv = to_iio_dev_priv(indio_dev);
        unsigned reg, val;
        char buf[80];
        int ret;
@@ -367,10 +376,10 @@ static ssize_t iio_debugfs_write_reg(struct file *file,
 
        switch (ret) {
        case 1:
-               indio_dev->cached_reg_addr = reg;
+               iio_dev_priv->cached_reg_addr = reg;
                break;
        case 2:
-               indio_dev->cached_reg_addr = reg;
+               iio_dev_priv->cached_reg_addr = reg;
                ret = indio_dev->info->debugfs_reg_access(indio_dev, reg,
                                                          val, NULL);
                if (ret) {
@@ -394,23 +403,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_priv *iio_dev_priv = to_iio_dev_priv(indio_dev);
+       debugfs_remove_recursive(iio_dev_priv->debugfs_dentry);
 }
 
 static void iio_device_register_debugfs(struct iio_dev *indio_dev)
 {
+       struct iio_dev_priv *iio_dev_priv;
+
        if (indio_dev->info->debugfs_reg_access == NULL)
                return;
 
        if (!iio_debugfs_dentry)
                return;
 
-       indio_dev->debugfs_dentry =
+       iio_dev_priv = to_iio_dev_priv(indio_dev);
+
+       iio_dev_priv->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_priv->debugfs_dentry, indio_dev,
                            &iio_debugfs_reg_fops);
 }
 #else
diff --git a/include/linux/iio/iio.h b/include/linux/iio/iio.h
index 38c4ea505394..6155e7aec60c 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.
  */
 struct iio_dev {
        int                             id;
@@ -565,12 +563,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
 };
 
 const struct iio_chan_spec
@@ -701,10 +693,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