]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/hisilicon/kirin: switch to of_drm_get_bridge_by_endpoint()
authorLuca Ceresoli <luca.ceresoli@bootlin.com>
Mon, 11 May 2026 16:40:08 +0000 (18:40 +0200)
committerLuca Ceresoli <luca.ceresoli@bootlin.com>
Tue, 19 May 2026 08:57:25 +0000 (10:57 +0200)
This driver calls drm_of_find_panel_or_bridge() with a NULL pointer in the
@panel parameter, thus using a reduced feature set of that function.
Replace this call with the simpler of_drm_get_bridge_by_endpoint().

Since of_drm_get_bridge_by_endpoint() increases the refcount of the
returned bridge, ensure it is put on removal. Here the bridge pointer is
only stored in a temporary variable, so a cleanup action is enough.

Reviewed-by: Louis Chauvet <louis.chauvet@bootlin.com>
Link: https://patch.msgid.link/20260511-drm-bridge-alloc-getput-panel_or_bridge-v6-4-f61c9e498b3f@bootlin.com
Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
drivers/gpu/drm/hisilicon/kirin/dw_drm_dsi.c

index e80debdc41763357cb2cf321205c0dfac80a911e..ab3cd309505aa663d2a2b953c56d5752275f9c66 100644 (file)
@@ -778,17 +778,16 @@ static int dsi_host_init(struct device *dev, struct dw_dsi *dsi)
 static int dsi_bridge_init(struct drm_device *dev, struct dw_dsi *dsi)
 {
        struct drm_encoder *encoder = &dsi->encoder;
-       struct drm_bridge *bridge;
+       struct drm_bridge *bridge __free(drm_bridge_put) = NULL;
        struct device_node *np = dsi->dev->of_node;
-       int ret;
 
        /*
         * Get the endpoint node. In our case, dsi has one output port1
         * to which the external HDMI bridge is connected.
         */
-       ret = drm_of_find_panel_or_bridge(np, 1, 0, NULL, &bridge);
-       if (ret)
-               return ret;
+       bridge = of_drm_get_bridge_by_endpoint(np, 1, 0);
+       if (IS_ERR(bridge))
+               return PTR_ERR(bridge);
 
        /* associate the bridge to dsi encoder */
        return drm_bridge_attach(encoder, bridge, NULL, 0);