diff options
-rw-r--r-- | drivers/gpu/drm/omapdrm/omap_drv.c | 5 | ||||
-rw-r--r-- | drivers/video/omap2/dss/manager-sysfs.c | 4 | ||||
-rw-r--r-- | drivers/video/omap2/dss/output.c | 19 | ||||
-rw-r--r-- | drivers/video/omap2/omapfb/omapfb-ioctl.c | 9 | ||||
-rw-r--r-- | drivers/video/omap2/omapfb/omapfb-main.c | 16 | ||||
-rw-r--r-- | include/video/omapdss.h | 3 |
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 | } |
142 | EXPORT_SYMBOL(omap_dss_find_output_by_node); | 142 | EXPORT_SYMBOL(omap_dss_find_output_by_node); |
143 | 143 | ||
144 | struct omap_dss_output *omapdss_find_output_from_display(struct omap_dss_device *dssdev) | ||
145 | { | ||
146 | return dssdev->output; | ||
147 | } | ||
148 | EXPORT_SYMBOL(omapdss_find_output_from_display); | ||
149 | |||
150 | struct 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 | } | ||
161 | EXPORT_SYMBOL(omapdss_find_mgr_from_display); | ||
162 | |||
144 | static const struct dss_mgr_ops *dss_mgr_ops; | 163 | static const struct dss_mgr_ops *dss_mgr_ops; |
145 | 164 | ||
146 | int dss_install_mgr_ops(const struct dss_mgr_ops *mgr_ops) | 165 | int 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); |
787 | int omapdss_output_unset_device(struct omap_dss_output *out); | 787 | int omapdss_output_unset_device(struct omap_dss_output *out); |
788 | 788 | ||
789 | struct omap_dss_output *omapdss_find_output_from_display(struct omap_dss_device *dssdev); | ||
790 | struct omap_overlay_manager *omapdss_find_mgr_from_display(struct omap_dss_device *dssdev); | ||
791 | |||
789 | void omapdss_default_get_resolution(struct omap_dss_device *dssdev, | 792 | void omapdss_default_get_resolution(struct omap_dss_device *dssdev, |
790 | u16 *xres, u16 *yres); | 793 | u16 *xres, u16 *yres); |
791 | int omapdss_default_get_recommended_bpp(struct omap_dss_device *dssdev); | 794 | int omapdss_default_get_recommended_bpp(struct omap_dss_device *dssdev); |