aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/video/omap2/dss/manager.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/video/omap2/dss/manager.c')
-rw-r--r--drivers/video/omap2/dss/manager.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/drivers/video/omap2/dss/manager.c b/drivers/video/omap2/dss/manager.c
index f933996..6485eff 100644
--- a/drivers/video/omap2/dss/manager.c
+++ b/drivers/video/omap2/dss/manager.c
@@ -39,6 +39,7 @@
static int num_managers;
static struct list_head manager_list;
+static struct omap_overlay_manager *mgrs[MAX_DSS_MANAGERS];
static ssize_t manager_name_show(struct omap_overlay_manager *mgr, char *buf)
{
@@ -716,7 +717,7 @@ static int dss_mgr_wait_for_vsync(struct omap_overlay_manager *mgr)
}
r = omap_dispc_wait_for_irq_interruptible_timeout(irq, timeout);
- if(!r)
+ if (!r)
mgr->device->first_vsync = true;
return r;
@@ -784,6 +785,8 @@ static int dss_mgr_wait_for_go(struct omap_overlay_manager *mgr)
}
r = omap_dispc_wait_for_irq_interruptible_timeout(irq, timeout);
+ if (!r)
+ mgr->device->first_vsync = true;
if (r == -ERESTARTSYS)
break;
@@ -1403,6 +1406,8 @@ static void dss_completion_irq_handler(void *data, u32 mask)
for (i = 0; i < num_mgrs; i++) {
mc = &dss_cache.manager_cache[i];
if (mask & masks[i]) {
+ if (mgrs[i] && mgrs[i]->device)
+ mgrs[i]->device->first_vsync = true;
dss_ovl_cb(&mc->cb.dispc, i, DSS_COMPLETION_DISPLAYED);
mc->cb.dispc_displayed = true;
}
@@ -1531,6 +1536,8 @@ static void dss_apply_irq_handler(void *data, u32 mask)
for (i = 0; i < num_mgrs; ++i) {
mc = &dss_cache.manager_cache[i];
if (!mgr_busy[i] && mc->shadow_dirty) {
+ if (mgrs[i] && mgrs[i]->device)
+ mgrs[i]->device->first_vsync = true;
dss_ovl_program_cb(&mc->cb, i);
mc->shadow_dirty = false;
}
@@ -2077,6 +2084,8 @@ static void omap_dss_add_overlay_manager(struct omap_overlay_manager *manager)
{
++num_managers;
list_add_tail(&manager->list, &manager_list);
+ if (manager->id < ARRAY_SIZE(mgrs))
+ mgrs[manager->id] = manager;
}
int dss_init_overlay_managers(struct platform_device *pdev)