Skip to content

Commit

Permalink
OMAPDSS: APPLY: clear shadow dirty flags only if GO had been set
Browse files Browse the repository at this point in the history
In the apply irq handler the code currently clears the shadow dirty
flags whenever the manager in question is not busy (i.e. GO bit is
down). However, this is not quite right, as the GO bit may have never
been set.

While not done in the current code, the above would cause bug in
scenario where the registers are written, and thus shadow_dirty flag is
set, but the GO bit will be set only later. In this case the
shadow_dirty flags would be cleared, even if the HW is not using the new
configurations.

This patch fixes the issue by clearing the shadow flags only when the GO
bit is clear, and the GO bit had been set.

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
  • Loading branch information
Tomi Valkeinen committed Dec 2, 2011
1 parent 9f80895 commit 5b21417
Showing 1 changed file with 5 additions and 2 deletions.
7 changes: 5 additions & 2 deletions drivers/video/omap2/dss/apply.c
Original file line number Diff line number Diff line change
Expand Up @@ -824,22 +824,25 @@ static void dss_apply_irq_handler(void *data, u32 mask)
for (i = 0; i < num_mgrs; i++) {
struct omap_overlay_manager *mgr;
struct mgr_priv_data *mp;
bool was_updating;

mgr = omap_dss_get_overlay_manager(i);
mp = get_mgr_priv(mgr);

if (!mp->enabled)
continue;

was_updating = mp->updating;
mp->updating = dispc_mgr_is_enabled(i);

if (!mgr_manual_update(mgr)) {
bool was_busy = mp->busy;
mp->busy = dispc_mgr_go_busy(i);

if (!mp->busy)
if (was_busy && !mp->busy)
mgr_clear_shadow_dirty(mgr);
} else {
if (!mp->updating)
if (was_updating && !mp->updating)
mgr_clear_shadow_dirty(mgr);
}
}
Expand Down

0 comments on commit 5b21417

Please sign in to comment.