drm/bridge: ti-sn65dsi86: Clean debugfs code
authorDouglas Anderson <dianders@chromium.org>
Fri, 23 Apr 2021 16:58:51 +0000 (09:58 -0700)
committerDouglas Anderson <dianders@chromium.org>
Mon, 3 May 2021 20:21:08 +0000 (13:21 -0700)
Let's cleanup the debugfs code to:
- Check for errors.
- Use devm to manage freeing, which also means we don't need to store
  a pointer in our structure.

Signed-off-by: Douglas Anderson <dianders@chromium.org>
Acked-by: Linus Walleij <linus.walleij@linaro.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20210423095743.v5.5.I5fe072753290c6a77eda736ebd5778e17b7cb0fb@changeid
drivers/gpu/drm/bridge/ti-sn65dsi86.c

index 443b532f6c6b7b47ba1a744a98847a471559c9c1..6f2a04fb991836e2b18b71500cba66afe79c58c1 100644 (file)
  * @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.
@@ -146,7 +145,6 @@ struct ti_sn65dsi86 {
        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;
@@ -245,18 +243,31 @@ static int status_show(struct seq_file *s, void *data)
 
 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 */
@@ -1317,8 +1328,6 @@ static int ti_sn65dsi86_remove(struct i2c_client *client)
 
        kfree(pdata->edid);
 
-       ti_sn65dsi86_debugfs_remove(pdata);
-
        drm_bridge_remove(&pdata->bridge);
 
        of_node_put(pdata->host_node);