summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/omapdrm/dss/dsi.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/omapdrm/dss/dsi.c')
-rw-r--r--drivers/gpu/drm/omapdrm/dss/dsi.c32
1 files changed, 21 insertions, 11 deletions
diff --git a/drivers/gpu/drm/omapdrm/dss/dsi.c b/drivers/gpu/drm/omapdrm/dss/dsi.c
index 41a98021d5bf..0e88ae1178f7 100644
--- a/drivers/gpu/drm/omapdrm/dss/dsi.c
+++ b/drivers/gpu/drm/omapdrm/dss/dsi.c
@@ -4881,32 +4881,42 @@ static int dsi_get_clocks(struct dsi_data *dsi)
return 0;
}
-static int dsi_connect(struct omap_dss_device *dssdev,
- struct omap_dss_device *dst)
+static int dsi_connect(struct omap_dss_device *src,
+ struct omap_dss_device *dst)
{
int r;
- r = dss_mgr_connect(dssdev);
+ r = dss_mgr_connect(dst);
if (r)
return r;
- r = omapdss_output_set_device(dssdev, dst);
+ r = omapdss_output_set_device(dst, dst->next);
if (r) {
DSSERR("failed to connect output to new device: %s\n",
- dssdev->name);
- dss_mgr_disconnect(dssdev);
- return r;
+ dst->name);
+ goto err_mgr_disconnect;
}
+ 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 dsi_disconnect(struct omap_dss_device *dssdev,
- struct omap_dss_device *dst)
+static void dsi_disconnect(struct omap_dss_device *src,
+ struct omap_dss_device *dst)
{
- omapdss_output_unset_device(dssdev);
+ omapdss_device_disconnect(dst, dst->next);
+ omapdss_output_unset_device(dst);
- dss_mgr_disconnect(dssdev);
+ dss_mgr_disconnect(dst);
}
static const struct omap_dss_device_ops dsi_ops = {