diff options
Diffstat (limited to 'drivers/gpu/drm/omapdrm/dss/dsi.c')
-rw-r--r-- | drivers/gpu/drm/omapdrm/dss/dsi.c | 32 |
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 = { |