summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/omapdrm/dss/sdi.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/omapdrm/dss/sdi.c')
-rw-r--r--drivers/gpu/drm/omapdrm/dss/sdi.c25
1 files changed, 11 insertions, 14 deletions
diff --git a/drivers/gpu/drm/omapdrm/dss/sdi.c b/drivers/gpu/drm/omapdrm/dss/sdi.c
index c32e8ed2a96f..2101a697a08a 100644
--- a/drivers/gpu/drm/omapdrm/dss/sdi.c
+++ b/drivers/gpu/drm/omapdrm/dss/sdi.c
@@ -261,24 +261,13 @@ static int sdi_connect(struct omap_dss_device *src,
if (r)
return r;
- r = omapdss_output_set_device(dst, dst);
+ 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 sdi_disconnect(struct omap_dss_device *src,
@@ -304,6 +293,7 @@ static const struct omap_dss_device_ops sdi_ops = {
static int sdi_init_output(struct sdi_device *sdi)
{
struct omap_dss_device *out = &sdi->output;
+ int r;
out->dev = &sdi->pdev->dev;
out->id = OMAP_DSS_OUTPUT_SDI;
@@ -322,6 +312,13 @@ static int sdi_init_output(struct sdi_device *sdi)
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;