]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/mxsfb/lcdif: simplify ep pointer management using __free
authorLuca Ceresoli <luca.ceresoli@bootlin.com>
Tue, 7 Apr 2026 12:24:16 +0000 (14:24 +0200)
committerLuca Ceresoli <luca.ceresoli@bootlin.com>
Tue, 14 Apr 2026 11:52:31 +0000 (13:52 +0200)
Putting the ep device_node reference requires a of_node_put(ep) in many
return points. Use a cleanup action to simplify the code.

Reviewed-by: Liu Ying <victor.liu@nxp.com>
Link: https://patch.msgid.link/20260407-drm-lcdif-dbanc-v4-2-247a16e61ef9@bootlin.com
Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
drivers/gpu/drm/mxsfb/lcdif_drv.c

index 7719629487da5c6ab9a7d4d3b627e210bd5671d5..8da8a265c05c8246dc02ca0fbe5b7edd0b7d649c 100644 (file)
@@ -49,7 +49,7 @@ static const struct drm_encoder_funcs lcdif_encoder_funcs = {
 static int lcdif_attach_bridge(struct lcdif_drm_private *lcdif)
 {
        struct device *dev = lcdif->drm->dev;
-       struct device_node *ep;
+       struct device_node *ep __free(device_node) = NULL;
        struct drm_bridge *bridge;
        int ret;
 
@@ -65,23 +65,19 @@ static int lcdif_attach_bridge(struct lcdif_drm_private *lcdif)
                ret = of_graph_parse_endpoint(ep, &of_ep);
                if (ret < 0) {
                        dev_err(dev, "Failed to parse endpoint %pOF\n", ep);
-                       of_node_put(ep);
                        return ret;
                }
 
                bridge = devm_drm_of_get_bridge(dev, dev->of_node, 0, of_ep.id);
-               if (IS_ERR(bridge)) {
-                       of_node_put(ep);
+               if (IS_ERR(bridge))
                        return dev_err_probe(dev, PTR_ERR(bridge),
                                             "Failed to get bridge for endpoint%u\n",
                                             of_ep.id);
-               }
 
                encoder = devm_kzalloc(dev, sizeof(*encoder), GFP_KERNEL);
                if (!encoder) {
                        dev_err(dev, "Failed to allocate encoder for endpoint%u\n",
                                of_ep.id);
-                       of_node_put(ep);
                        return -ENOMEM;
                }
 
@@ -91,17 +87,14 @@ static int lcdif_attach_bridge(struct lcdif_drm_private *lcdif)
                if (ret) {
                        dev_err(dev, "Failed to initialize encoder for endpoint%u: %d\n",
                                of_ep.id, ret);
-                       of_node_put(ep);
                        return ret;
                }
 
                ret = drm_bridge_attach(encoder, bridge, NULL, 0);
-               if (ret) {
-                       of_node_put(ep);
+               if (ret)
                        return dev_err_probe(dev, ret,
                                             "Failed to attach bridge for endpoint%u\n",
                                             of_ep.id);
-               }
        }
 
        return 0;