* @aux:          Our aux channel.
  * @bridge:       Our bridge.
  * @connector:    Our connector.
- * @debugfs:      Used for managing our debugfs.
  * @host_node:    Remote DSI node.
  * @dsi:          Our MIPI DSI source.
  * @edid:         Detected EDID of eDP panel.
        struct drm_dp_aux               aux;
        struct drm_bridge               bridge;
        struct drm_connector            connector;
-       struct dentry                   *debugfs;
        struct edid                     *edid;
        struct device_node              *host_node;
        struct mipi_dsi_device          *dsi;
 
 DEFINE_SHOW_ATTRIBUTE(status);
 
-static void ti_sn65dsi86_debugfs_init(struct ti_sn65dsi86 *pdata)
+static void ti_sn65dsi86_debugfs_remove(void *data)
 {
-       pdata->debugfs = debugfs_create_dir(dev_name(pdata->dev), NULL);
-
-       debugfs_create_file("status", 0600, pdata->debugfs, pdata,
-                       &status_fops);
+       debugfs_remove_recursive(data);
 }
 
-static void ti_sn65dsi86_debugfs_remove(struct ti_sn65dsi86 *pdata)
+static void ti_sn65dsi86_debugfs_init(struct ti_sn65dsi86 *pdata)
 {
-       debugfs_remove_recursive(pdata->debugfs);
-       pdata->debugfs = NULL;
+       struct device *dev = pdata->dev;
+       struct dentry *debugfs;
+       int ret;
+
+       debugfs = debugfs_create_dir(dev_name(dev), NULL);
+
+       /*
+        * We might get an error back if debugfs wasn't enabled in the kernel
+        * so let's just silently return upon failure.
+        */
+       if (IS_ERR_OR_NULL(debugfs))
+               return;
+
+       ret = devm_add_action_or_reset(dev, ti_sn65dsi86_debugfs_remove, debugfs);
+       if (ret)
+               return;
+
+       debugfs_create_file("status", 0600, debugfs, pdata, &status_fops);
 }
 
 /* Connector funcs */
 
        kfree(pdata->edid);
 
-       ti_sn65dsi86_debugfs_remove(pdata);
-
        drm_bridge_remove(&pdata->bridge);
 
        of_node_put(pdata->host_node);