aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/omapdrm/omap_drv.c5
-rw-r--r--drivers/video/omap2/dss/manager-sysfs.c4
-rw-r--r--drivers/video/omap2/dss/output.c19
-rw-r--r--drivers/video/omap2/omapfb/omapfb-ioctl.c9
-rw-r--r--drivers/video/omap2/omapfb/omapfb-main.c16
-rw-r--r--include/video/omapdss.h3
6 files changed, 43 insertions, 13 deletions
diff --git a/drivers/gpu/drm/omapdrm/omap_drv.c b/drivers/gpu/drm/omapdrm/omap_drv.c
index 826586ffbe83..b3577cb367af 100644
--- a/drivers/gpu/drm/omapdrm/omap_drv.c
+++ b/drivers/gpu/drm/omapdrm/omap_drv.c
@@ -247,6 +247,9 @@ static int omap_modeset_init(struct drm_device *dev)
247 struct drm_encoder *encoder = priv->encoders[i]; 247 struct drm_encoder *encoder = priv->encoders[i];
248 struct omap_dss_device *dssdev = 248 struct omap_dss_device *dssdev =
249 omap_encoder_get_dssdev(encoder); 249 omap_encoder_get_dssdev(encoder);
250 struct omap_dss_output *output;
251
252 output = omapdss_find_output_from_display(dssdev);
250 253
251 /* figure out which crtc's we can connect the encoder to: */ 254 /* figure out which crtc's we can connect the encoder to: */
252 encoder->possible_crtcs = 0; 255 encoder->possible_crtcs = 0;
@@ -259,7 +262,7 @@ static int omap_modeset_init(struct drm_device *dev)
259 supported_outputs = 262 supported_outputs =
260 dss_feat_get_supported_outputs(crtc_channel); 263 dss_feat_get_supported_outputs(crtc_channel);
261 264
262 if (supported_outputs & dssdev->output->id) 265 if (supported_outputs & output->id)
263 encoder->possible_crtcs |= (1 << id); 266 encoder->possible_crtcs |= (1 << id);
264 } 267 }
265 } 268 }
diff --git a/drivers/video/omap2/dss/manager-sysfs.c b/drivers/video/omap2/dss/manager-sysfs.c
index 9a2fb59b6f89..51046819f33b 100644
--- a/drivers/video/omap2/dss/manager-sysfs.c
+++ b/drivers/video/omap2/dss/manager-sysfs.c
@@ -78,7 +78,9 @@ static ssize_t manager_display_store(struct omap_overlay_manager *mgr,
78 } 78 }
79 79
80 if (dssdev) { 80 if (dssdev) {
81 struct omap_dss_output *out = dssdev->output; 81 struct omap_dss_output *out;
82
83 out = omapdss_find_output_from_display(dssdev);
82 84
83 /* 85 /*
84 * a registered device should have an output connected to it 86 * a registered device should have an output connected to it
diff --git a/drivers/video/omap2/dss/output.c b/drivers/video/omap2/dss/output.c
index 4d01001497f4..ab2c0f0ab244 100644
--- a/drivers/video/omap2/dss/output.c
+++ b/drivers/video/omap2/dss/output.c
@@ -141,6 +141,25 @@ struct omap_dss_output *omap_dss_find_output_by_node(struct device_node *node)
141} 141}
142EXPORT_SYMBOL(omap_dss_find_output_by_node); 142EXPORT_SYMBOL(omap_dss_find_output_by_node);
143 143
144struct omap_dss_output *omapdss_find_output_from_display(struct omap_dss_device *dssdev)
145{
146 return dssdev->output;
147}
148EXPORT_SYMBOL(omapdss_find_output_from_display);
149
150struct omap_overlay_manager *omapdss_find_mgr_from_display(struct omap_dss_device *dssdev)
151{
152 struct omap_dss_output *out;
153
154 out = omapdss_find_output_from_display(dssdev);
155
156 if (out == NULL)
157 return NULL;
158
159 return out->manager;
160}
161EXPORT_SYMBOL(omapdss_find_mgr_from_display);
162
144static const struct dss_mgr_ops *dss_mgr_ops; 163static const struct dss_mgr_ops *dss_mgr_ops;
145 164
146int dss_install_mgr_ops(const struct dss_mgr_ops *mgr_ops) 165int dss_install_mgr_ops(const struct dss_mgr_ops *mgr_ops)
diff --git a/drivers/video/omap2/omapfb/omapfb-ioctl.c b/drivers/video/omap2/omapfb/omapfb-ioctl.c
index d30b45d72649..146b6f5428db 100644
--- a/drivers/video/omap2/omapfb/omapfb-ioctl.c
+++ b/drivers/video/omap2/omapfb/omapfb-ioctl.c
@@ -770,12 +770,17 @@ int omapfb_ioctl(struct fb_info *fbi, unsigned int cmd, unsigned long arg)
770 770
771 case OMAPFB_WAITFORVSYNC: 771 case OMAPFB_WAITFORVSYNC:
772 DBG("ioctl WAITFORVSYNC\n"); 772 DBG("ioctl WAITFORVSYNC\n");
773 if (!display || !display->output || !display->output->manager) { 773
774 if (!display) {
774 r = -EINVAL; 775 r = -EINVAL;
775 break; 776 break;
776 } 777 }
777 778
778 mgr = display->output->manager; 779 mgr = omapdss_find_mgr_from_display(display);
780 if (!mgr) {
781 r = -EINVAL;
782 break;
783 }
779 784
780 r = mgr->wait_for_vsync(mgr); 785 r = mgr->wait_for_vsync(mgr);
781 break; 786 break;
diff --git a/drivers/video/omap2/omapfb/omapfb-main.c b/drivers/video/omap2/omapfb/omapfb-main.c
index 856917b33616..cc8953c4faa1 100644
--- a/drivers/video/omap2/omapfb/omapfb-main.c
+++ b/drivers/video/omap2/omapfb/omapfb-main.c
@@ -2363,18 +2363,16 @@ static int omapfb_init_connections(struct omapfb2_device *fbdev,
2363 int i, r; 2363 int i, r;
2364 struct omap_overlay_manager *mgr; 2364 struct omap_overlay_manager *mgr;
2365 2365
2366 if (!def_dssdev->output) {
2367 dev_err(fbdev->dev, "no output for the default display\n");
2368 return -EINVAL;
2369 }
2370
2371 for (i = 0; i < fbdev->num_displays; ++i) { 2366 for (i = 0; i < fbdev->num_displays; ++i) {
2372 struct omap_dss_device *dssdev = fbdev->displays[i].dssdev; 2367 struct omap_dss_device *dssdev = fbdev->displays[i].dssdev;
2373 struct omap_dss_output *out = dssdev->output; 2368 struct omap_dss_output *out;
2374 2369
2375 mgr = omap_dss_get_overlay_manager(out->dispc_channel); 2370 out = omapdss_find_output_from_display(dssdev);
2371 if (!out)
2372 continue;
2376 2373
2377 if (!mgr || !out) 2374 mgr = omap_dss_get_overlay_manager(out->dispc_channel);
2375 if (!mgr)
2378 continue; 2376 continue;
2379 2377
2380 if (mgr->output) 2378 if (mgr->output)
@@ -2383,7 +2381,7 @@ static int omapfb_init_connections(struct omapfb2_device *fbdev,
2383 mgr->set_output(mgr, out); 2381 mgr->set_output(mgr, out);
2384 } 2382 }
2385 2383
2386 mgr = def_dssdev->output->manager; 2384 mgr = omapdss_find_mgr_from_display(def_dssdev);
2387 2385
2388 if (!mgr) { 2386 if (!mgr) {
2389 dev_err(fbdev->dev, "no ovl manager for the default display\n"); 2387 dev_err(fbdev->dev, "no ovl manager for the default display\n");
diff --git a/include/video/omapdss.h b/include/video/omapdss.h
index 25a944e080b4..898f81247859 100644
--- a/include/video/omapdss.h
+++ b/include/video/omapdss.h
@@ -786,6 +786,9 @@ int omapdss_output_set_device(struct omap_dss_output *out,
786 struct omap_dss_device *dssdev); 786 struct omap_dss_device *dssdev);
787int omapdss_output_unset_device(struct omap_dss_output *out); 787int omapdss_output_unset_device(struct omap_dss_output *out);
788 788
789struct omap_dss_output *omapdss_find_output_from_display(struct omap_dss_device *dssdev);
790struct omap_overlay_manager *omapdss_find_mgr_from_display(struct omap_dss_device *dssdev);
791
789void omapdss_default_get_resolution(struct omap_dss_device *dssdev, 792void omapdss_default_get_resolution(struct omap_dss_device *dssdev,
790 u16 *xres, u16 *yres); 793 u16 *xres, u16 *yres);
791int omapdss_default_get_recommended_bpp(struct omap_dss_device *dssdev); 794int omapdss_default_get_recommended_bpp(struct omap_dss_device *dssdev);