[IIO_CHAN_INFO_THERMOCOUPLE_TYPE] = "thermocouple_type",
 };
 
+#if defined(CONFIG_DEBUG_FS)
+/**
+ * There's also a CONFIG_DEBUG_FS guard in include/linux/iio/iio.h for
+ * iio_get_debugfs_dentry() to make it inline if CONFIG_DEBUG_FS is undefined
+ */
+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);
+#endif
+
 /**
  * iio_find_channel_from_si() - get channel from its scan index
  * @indio_dev:         device
                              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;
 
        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) {
 
 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
 
  * @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
  */
        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;
 };
 
  * @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)
 {