OMAPDSS: APPLY: fix need_isr
authorTomi Valkeinen <tomi.valkeinen@ti.com>
Fri, 25 Nov 2011 15:26:13 +0000 (17:26 +0200)
committerTomi Valkeinen <tomi.valkeinen@ti.com>
Fri, 2 Dec 2011 06:54:55 +0000 (08:54 +0200)
need_isr() should return true whenever there's work that needs to be
handled in the VSYNC/FRAMEDONE irq handler. However, need_isr() is
missing some cases where we need the irq handler.

This patch adds checks for shadow dirty flags, so that the irq handler
is started/kept running while shadow dirty flags are set.

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
drivers/video/omap2/dss/apply.c

index 5d205ada30de660cba243d4a37edf91a39b46aa4..98fef08da3baad16e026f4c0368ccefd1153fec9 100644 (file)
@@ -358,16 +358,38 @@ static bool need_isr(void)
                        if (mp->info_dirty)
                                return true;
 
+                       /* to set GO bit */
+                       if (mp->shadow_info_dirty)
+                               return true;
+
                        list_for_each_entry(ovl, &mgr->overlays, list) {
                                struct ovl_priv_data *op;
 
                                op = get_ovl_priv(ovl);
 
+                               /*
+                                * NOTE: we check extra_info flags even for
+                                * disabled overlays, as extra_infos need to be
+                                * always written.
+                                */
+
+                               /* to write new values to registers */
+                               if (op->extra_info_dirty)
+                                       return true;
+
+                               /* to set GO bit */
+                               if (op->shadow_extra_info_dirty)
+                                       return true;
+
                                if (!op->enabled)
                                        continue;
 
                                /* to write new values to registers */
-                               if (op->info_dirty || op->extra_info_dirty)
+                               if (op->info_dirty)
+                                       return true;
+
+                               /* to set GO bit */
+                               if (op->shadow_info_dirty)
                                        return true;
                        }
                }