diff --git a/drivers/gpu/drm/omapdrm/dss/dpi.c b/drivers/gpu/drm/omapdrm/dss/dpi.c index 0c11d17f23a4..5839009f272e 100644 --- a/drivers/gpu/drm/omapdrm/dss/dpi.c +++ b/drivers/gpu/drm/omapdrm/dss/dpi.c @@ -745,15 +745,14 @@ int dpi_init_port(struct dss_device *dss, struct platform_device *pdev, 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; @@ -764,11 +763,6 @@ int dpi_init_port(struct dss_device *dss, struct platform_device *pdev, dpi_init_output_port(dpi, port); return 0; - -err_datalines: - of_node_put(ep); - - return r; } void dpi_uninit_port(struct device_node *port) diff --git a/drivers/gpu/drm/omapdrm/dss/dsi.c b/drivers/gpu/drm/omapdrm/dss/dsi.c index ee260353b9ca..173c05a54550 100644 --- a/drivers/gpu/drm/omapdrm/dss/dsi.c +++ b/drivers/gpu/drm/omapdrm/dss/dsi.c @@ -5360,7 +5360,7 @@ static int dsi_bind(struct device *dev, struct device *master, void *data) 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", @@ -5381,7 +5381,7 @@ static int dsi_bind(struct device *dev, struct device *master, void *data) 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); @@ -5404,11 +5404,10 @@ static int dsi_bind(struct device *dev, struct device *master, void *data) 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; } diff --git a/drivers/gpu/drm/omapdrm/dss/hdmi4.c b/drivers/gpu/drm/omapdrm/dss/hdmi4.c index bf800cede2ad..1d1f2e0b2b2a 100644 --- a/drivers/gpu/drm/omapdrm/dss/hdmi4.c +++ b/drivers/gpu/drm/omapdrm/dss/hdmi4.c @@ -780,9 +780,7 @@ static int hdmi4_bind(struct device *dev, struct device *master, void *data) 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, @@ -790,6 +788,9 @@ static int hdmi4_bind(struct device *dev, struct device *master, void *data) return 0; +err_uninit_output: + hdmi_uninit_output(hdmi); + pm_runtime_disable(&pdev->dev); err_pll: hdmi_pll_uninit(&hdmi->pll); err_free: diff --git a/drivers/gpu/drm/omapdrm/dss/hdmi5.c b/drivers/gpu/drm/omapdrm/dss/hdmi5.c index e5d23dd19f99..92ae561bf974 100644 --- a/drivers/gpu/drm/omapdrm/dss/hdmi5.c +++ b/drivers/gpu/drm/omapdrm/dss/hdmi5.c @@ -773,9 +773,7 @@ static int hdmi5_bind(struct device *dev, struct device *master, void *data) 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, @@ -783,6 +781,9 @@ static int hdmi5_bind(struct device *dev, struct device *master, void *data) return 0; +err_uninit_output: + hdmi_uninit_output(hdmi); + pm_runtime_disable(&pdev->dev); err_pll: hdmi_pll_uninit(&hdmi->pll); err_free: diff --git a/drivers/gpu/drm/omapdrm/dss/sdi.c b/drivers/gpu/drm/omapdrm/dss/sdi.c index 4b70a3044dd6..e9b280784264 100644 --- a/drivers/gpu/drm/omapdrm/dss/sdi.c +++ b/drivers/gpu/drm/omapdrm/dss/sdi.c @@ -358,16 +358,15 @@ int sdi_init_port(struct dss_device *dss, struct platform_device *pdev, } 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; @@ -375,8 +374,6 @@ int sdi_init_port(struct dss_device *dss, struct platform_device *pdev, return 0; -err_datapairs: - of_node_put(ep); err_free: kfree(sdi); diff --git a/drivers/gpu/drm/omapdrm/dss/venc.c b/drivers/gpu/drm/omapdrm/dss/venc.c index dd9af335dba0..93c3e5250a63 100644 --- a/drivers/gpu/drm/omapdrm/dss/venc.c +++ b/drivers/gpu/drm/omapdrm/dss/venc.c @@ -867,7 +867,7 @@ static int venc_bind(struct device *dev, struct device *master, void *data) 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); @@ -877,7 +877,7 @@ static int venc_bind(struct device *dev, struct device *master, void *data) 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, @@ -887,8 +887,7 @@ static int venc_bind(struct device *dev, struct device *master, void *data) return 0; -err_probe_of: -err_runtime_get: +err_pm_disable: pm_runtime_disable(&pdev->dev); err_free: kfree(venc);