提交 6b6f1edf 编写于 作者: T Tomi Valkeinen

OMAPFB: connect ovl managers to all dssdevs

Commit 5d89bcc3 (OMAPDSS: remove initial
display code from omapdss) moved setting up the initial overlay, overlay
manager, output and display connections from omapdss to omapfb.

However, currently omapfb only handles the connection related to the
default display, which means that no overlay managers are connected to
other displays.

This patch changes omapfb to go through all dssdevs, and connect an
overlay manager to them.
Signed-off-by: NTomi Valkeinen <tomi.valkeinen@ti.com>
上级 486c0e17
......@@ -2349,27 +2349,37 @@ static int omapfb_init_display(struct omapfb2_device *fbdev,
}
static int omapfb_init_connections(struct omapfb2_device *fbdev,
struct omap_dss_device *dssdev)
struct omap_dss_device *def_dssdev)
{
int i, r;
struct omap_overlay_manager *mgr = NULL;
struct omap_overlay_manager *mgr;
for (i = 0; i < fbdev->num_managers; i++) {
mgr = fbdev->managers[i];
if (dssdev->channel == mgr->id)
break;
if (!def_dssdev->output) {
dev_err(fbdev->dev, "no output for the default display\n");
return -EINVAL;
}
if (i == fbdev->num_managers)
return -ENODEV;
for (i = 0; i < fbdev->num_displays; ++i) {
struct omap_dss_device *dssdev = fbdev->displays[i].dssdev;
struct omap_dss_output *out = dssdev->output;
if (mgr->output)
mgr->unset_output(mgr);
mgr = omap_dss_get_overlay_manager(dssdev->channel);
r = mgr->set_output(mgr, dssdev->output);
if (r)
return r;
if (!mgr || !out)
continue;
if (mgr->output)
mgr->unset_output(mgr);
mgr->set_output(mgr, out);
}
mgr = def_dssdev->output->manager;
if (!mgr) {
dev_err(fbdev->dev, "no ovl manager for the default display\n");
return -EINVAL;
}
for (i = 0; i < fbdev->num_overlays; i++) {
struct omap_overlay *ovl = fbdev->overlays[i];
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册