The main loop in imx8qxp_pixel_link_find_next_bridge() requires calling of_node_put() in multiple places, complicating code flow. Simplify it by using a cleanup action and making the 'remote' variable scope local to the loop.
Signed-off-by: Luca Ceresoli <[email protected]> --- Cc: Liu Ying <[email protected]> --- drivers/gpu/drm/bridge/imx/imx8qxp-pixel-link.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/drivers/gpu/drm/bridge/imx/imx8qxp-pixel-link.c b/drivers/gpu/drm/bridge/imx/imx8qxp-pixel-link.c index 53016f0d53a0..2ecc3c1051e5 100644 --- a/drivers/gpu/drm/bridge/imx/imx8qxp-pixel-link.c +++ b/drivers/gpu/drm/bridge/imx/imx8qxp-pixel-link.c @@ -260,7 +260,7 @@ static struct drm_bridge * imx8qxp_pixel_link_find_next_bridge(struct imx8qxp_pixel_link *pl) { struct device_node *np = pl->dev->of_node; - struct device_node *port, *remote; + struct device_node *port; struct drm_bridge *selected_bridge = NULL; u32 port_id; bool found_port = false; @@ -286,7 +286,8 @@ imx8qxp_pixel_link_find_next_bridge(struct imx8qxp_pixel_link *pl) } for (reg = 0; reg < PL_MAX_NEXT_BRIDGES; reg++) { - remote = of_graph_get_remote_node(np, port_id, reg); + struct device_node *remote __free(device_node) = + of_graph_get_remote_node(np, port_id, reg); if (!remote) continue; @@ -294,15 +295,12 @@ imx8qxp_pixel_link_find_next_bridge(struct imx8qxp_pixel_link *pl) DRM_DEV_DEBUG(pl->dev, "port%u endpoint%u remote parent is not available\n", port_id, reg); - of_node_put(remote); continue; } struct drm_bridge *next_bridge = of_drm_find_bridge(remote); - if (!next_bridge) { - of_node_put(remote); + if (!next_bridge) return ERR_PTR(-EPROBE_DEFER); - } /* * Select the next bridge with companion PXL2DPI if @@ -310,8 +308,6 @@ imx8qxp_pixel_link_find_next_bridge(struct imx8qxp_pixel_link *pl) */ if (!selected_bridge || of_property_present(remote, "fsl,companion-pxl2dpi")) selected_bridge = next_bridge; - - of_node_put(remote); } pl->mst_addr = port_id - 1; -- 2.51.1
