summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/omapdrm/dss/hdmi4.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/omapdrm/dss/hdmi4.c')
-rw-r--r--drivers/gpu/drm/omapdrm/dss/hdmi4.c25
1 files changed, 11 insertions, 14 deletions
diff --git a/drivers/gpu/drm/omapdrm/dss/hdmi4.c b/drivers/gpu/drm/omapdrm/dss/hdmi4.c
index 9f883669e71b..22f8b74f5bf5 100644
--- a/drivers/gpu/drm/omapdrm/dss/hdmi4.c
+++ b/drivers/gpu/drm/omapdrm/dss/hdmi4.c
@@ -437,24 +437,13 @@ static int hdmi_connect(struct omap_dss_device *src,
if (r)
return r;
- r = omapdss_output_set_device(dst, dst->next);
+ r = omapdss_device_connect(dst->dss, dst, dst->next);
if (r) {
- DSSERR("failed to connect output to new device: %s\n",
- dst->name);
- goto err_mgr_disconnect;
+ dss_mgr_disconnect(dst);
+ return r;
}
- r = omapdss_device_connect(dst->dss, dst, dst->next);
- if (r)
- goto err_output_unset;
-
return 0;
-
-err_output_unset:
- omapdss_output_unset_device(dst);
-err_mgr_disconnect:
- dss_mgr_disconnect(dst);
- return r;
}
static void hdmi_disconnect(struct omap_dss_device *src,
@@ -717,6 +706,7 @@ static const struct component_ops hdmi4_component_ops = {
static int hdmi4_init_output(struct omap_hdmi *hdmi)
{
struct omap_dss_device *out = &hdmi->output;
+ int r;
out->dev = &hdmi->pdev->dev;
out->id = OMAP_DSS_OUTPUT_HDMI;
@@ -734,6 +724,13 @@ static int hdmi4_init_output(struct omap_hdmi *hdmi)
return PTR_ERR(out->next);
}
+ r = omapdss_output_validate(out);
+ if (r) {
+ omapdss_device_put(out->next);
+ out->next = NULL;
+ return r;
+ }
+
omapdss_device_register(out);
return 0;