return 0;
 
        r = of_property_read_u32(ep, "data-lines", &datalines);
+       of_node_put(ep);
        if (r) {
                DSSERR("failed to parse datalines\n");
-               goto err_datalines;
+               return r;
        }
 
        dpi->data_lines = datalines;
 
-       of_node_put(ep);
-
        dpi->pdev = pdev;
        dpi->dss_model = dss_model;
        dpi->dss = dss;
        dpi_init_output_port(dpi, port);
 
        return 0;
-
-err_datalines:
-       of_node_put(ep);
-
-       return r;
 }
 
 void dpi_uninit_port(struct device_node *port)
 
 
        r = dsi_runtime_get(dsi);
        if (r)
-               goto err_runtime_get;
+               goto err_pm_disable;
 
        rev = dsi_read_reg(dsi, DSI_REVISION);
        dev_dbg(dev, "OMAP DSI rev %d.%d\n",
        r = dsi_probe_of(dsi);
        if (r) {
                DSSERR("Invalid DSI DT data\n");
-               goto err_probe_of;
+               goto err_uninit_output;
        }
 
        r = of_platform_populate(dev->of_node, NULL, NULL, dev);
 
        return 0;
 
-err_probe_of:
+err_uninit_output:
        dsi_uninit_output(dsi);
        dsi_runtime_put(dsi);
-
-err_runtime_get:
+err_pm_disable:
        pm_runtime_disable(dev);
        return r;
 }
 
        r = hdmi_audio_register(hdmi);
        if (r) {
                DSSERR("Registering HDMI audio failed\n");
-               hdmi_uninit_output(hdmi);
-               pm_runtime_disable(&pdev->dev);
-               return r;
+               goto err_uninit_output;
        }
 
        hdmi->debugfs = dss_debugfs_create_file(dss, "hdmi", hdmi_dump_regs,
 
        return 0;
 
+err_uninit_output:
+       hdmi_uninit_output(hdmi);
+       pm_runtime_disable(&pdev->dev);
 err_pll:
        hdmi_pll_uninit(&hdmi->pll);
 err_free:
 
        r = hdmi_audio_register(hdmi);
        if (r) {
                DSSERR("Registering HDMI audio failed %d\n", r);
-               hdmi_uninit_output(hdmi);
-               pm_runtime_disable(&pdev->dev);
-               return r;
+               goto err_uninit_output;
        }
 
        hdmi->debugfs = dss_debugfs_create_file(dss, "hdmi", hdmi_dump_regs,
 
        return 0;
 
+err_uninit_output:
+       hdmi_uninit_output(hdmi);
+       pm_runtime_disable(&pdev->dev);
 err_pll:
        hdmi_pll_uninit(&hdmi->pll);
 err_free:
 
        }
 
        r = of_property_read_u32(ep, "datapairs", &datapairs);
+       of_node_put(ep);
        if (r) {
                DSSERR("failed to parse datapairs\n");
-               goto err_datapairs;
+               goto err_free;
        }
 
        sdi->datapairs = datapairs;
        sdi->dss = dss;
 
-       of_node_put(ep);
-
        sdi->pdev = pdev;
        port->data = sdi;
 
 
        return 0;
 
-err_datapairs:
-       of_node_put(ep);
 err_free:
        kfree(sdi);
 
 
 
        r = venc_runtime_get(venc);
        if (r)
-               goto err_runtime_get;
+               goto err_pm_disable;
 
        rev_id = (u8)(venc_read_reg(venc, VENC_REV_ID) & 0xff);
        dev_dbg(&pdev->dev, "OMAP VENC rev %d\n", rev_id);
        r = venc_probe_of(venc);
        if (r) {
                DSSERR("Invalid DT data\n");
-               goto err_probe_of;
+               goto err_pm_disable;
        }
 
        venc->debugfs = dss_debugfs_create_file(dss, "venc", venc_dump_regs,
 
        return 0;
 
-err_probe_of:
-err_runtime_get:
+err_pm_disable:
        pm_runtime_disable(&pdev->dev);
 err_free:
        kfree(venc);