summaryrefslogtreecommitdiffstats
path: root/drivers/video/omap2/dss/display.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/video/omap2/dss/display.c')
-rw-r--r--drivers/video/omap2/dss/display.c35
1 files changed, 27 insertions, 8 deletions
diff --git a/drivers/video/omap2/dss/display.c b/drivers/video/omap2/dss/display.c
index db83ae81a713..ccf8550fafde 100644
--- a/drivers/video/omap2/dss/display.c
+++ b/drivers/video/omap2/dss/display.c
@@ -327,22 +327,35 @@ EXPORT_SYMBOL(omapdss_default_get_timings);
*/
static int dss_init_connections(struct omap_dss_device *dssdev, bool force)
{
+ struct omap_dss_output *out;
struct omap_overlay_manager *mgr;
int i, r;
- WARN_ON(dssdev->manager);
+ out = omapdss_get_output_from_dssdev(dssdev);
+
+ WARN_ON(dssdev->output);
+ WARN_ON(out->device);
+
+ r = omapdss_output_set_device(out, dssdev);
+ if (r) {
+ DSSERR("failed to connect output to new device\n");
+ return r;
+ }
mgr = omap_dss_get_overlay_manager(dssdev->channel);
- if (mgr->device && !force)
+ if (mgr->output && !force)
return 0;
- if (mgr->device)
- mgr->unset_device(mgr);
+ if (mgr->output)
+ mgr->unset_output(mgr);
- r = mgr->set_device(mgr, dssdev);
+ r = mgr->set_output(mgr, out);
if (r) {
- DSSERR("failed to set initial manager\n");
+ DSSERR("failed to connect manager to output of new device\n");
+
+ /* remove the output-device connection we just made */
+ omapdss_output_unset_device(out);
return r;
}
@@ -366,8 +379,14 @@ static int dss_init_connections(struct omap_dss_device *dssdev, bool force)
static void dss_uninit_connections(struct omap_dss_device *dssdev)
{
- if (dssdev->manager)
- dssdev->manager->unset_device(dssdev->manager);
+ if (dssdev->output) {
+ struct omap_overlay_manager *mgr = dssdev->output->manager;
+
+ if (mgr)
+ mgr->unset_output(mgr);
+
+ omapdss_output_unset_device(dssdev->output);
+ }
}
int dss_init_device(struct platform_device *pdev,
OpenPOWER on IntegriCloud