Peter Chen writes: > of_node_put needs to be called when the device node which is got > from of_parse_phandle has finished using. > > Cc: Eric Anholt > Signed-off-by: Peter Chen > --- > drivers/gpu/drm/vc4/vc4_hdmi.c | 13 +++++++------ > 1 file changed, 7 insertions(+), 6 deletions(-) > > diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c > index fd2644d..26b6b06 100644 > --- a/drivers/gpu/drm/vc4/vc4_hdmi.c > +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c > @@ -465,12 +465,6 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data) > if (IS_ERR(hdmi->hd_regs)) > return PTR_ERR(hdmi->hd_regs); > > - ddc_node = of_parse_phandle(dev->of_node, "ddc", 0); > - if (!ddc_node) { > - DRM_ERROR("Failed to find ddc node in device tree\n"); > - return -ENODEV; > - } > - > hdmi->pixel_clock = devm_clk_get(dev, "pixel"); > if (IS_ERR(hdmi->pixel_clock)) { > DRM_ERROR("Failed to get pixel clock\n"); > @@ -482,7 +476,14 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data) > return PTR_ERR(hdmi->hsm_clock); > } > > + ddc_node = of_parse_phandle(dev->of_node, "ddc", 0); > + if (!ddc_node) { > + DRM_ERROR("Failed to find ddc node in device tree\n"); > + return -ENODEV; > + } > + > hdmi->ddc = of_find_i2c_adapter_by_node(ddc_node); > + of_node_put(ddc_node); > if (!hdmi->ddc) { > DRM_DEBUG("Failed to get ddc i2c adapter by node\n"); > return -EPROBE_DEFER; > -- Reviewed-by: Eric Anholt It would be nice if we could just pass the phandle spec directly to the i2c function. OF code always seems terribly verbose to me (and error-prone in this exact way) because of the separate phandle lookup.