Skip to content

Commit

Permalink
OMAPDSS: APPLY: clean up isr_handler
Browse files Browse the repository at this point in the history
Add a helper function mgr_clear_shadow_dirty(), which clears the
shadow_dirty flags for the given manager and for the overlays on that
manager.

This lets us simplify the code in the dss_apply_irq_handler().

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
  • Loading branch information
Tomi Valkeinen committed Dec 2, 2011
1 parent 3486137 commit 7609893
Showing 1 changed file with 28 additions and 24 deletions.
52 changes: 28 additions & 24 deletions drivers/video/omap2/dss/apply.c
Original file line number Diff line number Diff line change
Expand Up @@ -508,47 +508,51 @@ static void dss_unregister_vsync_isr(void)
dss_data.irq_enabled = false;
}

static void dss_apply_irq_handler(void *data, u32 mask)
static void mgr_clear_shadow_dirty(struct omap_overlay_manager *mgr)
{
struct omap_overlay *ovl;
struct omap_overlay_manager *mgr;
struct mgr_priv_data *mp;
struct ovl_priv_data *op;
const int num_ovls = dss_feat_get_num_ovls();

mp = get_mgr_priv(mgr);
mp->shadow_dirty = false;

list_for_each_entry(ovl, &mgr->overlays, list) {
op = get_ovl_priv(ovl);
op->shadow_dirty = false;
op->shadow_extra_info_dirty = false;
}
}

static void dss_apply_irq_handler(void *data, u32 mask)
{
const int num_mgrs = dss_feat_get_num_mgrs();
int i;

spin_lock(&data_lock);

/* clear busy, updating flags, shadow_dirty flags */
for (i = 0; i < num_mgrs; i++) {
struct omap_overlay_manager *mgr;
struct mgr_priv_data *mp;

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

mp->busy = dispc_mgr_go_busy(i);
mp->updating = dispc_mgr_is_enabled(i);
}

for (i = 0; i < num_ovls; ++i) {
ovl = omap_dss_get_overlay(i);
op = get_ovl_priv(ovl);

if (!op->enabled)
if (!mp->enabled)
continue;

mp = get_mgr_priv(ovl->manager);

if (!mp->busy) {
op->shadow_dirty = false;
op->shadow_extra_info_dirty = false;
}
}
mp->updating = dispc_mgr_is_enabled(i);

for (i = 0; i < num_mgrs; ++i) {
mgr = omap_dss_get_overlay_manager(i);
mp = get_mgr_priv(mgr);
if (!mgr_manual_update(mgr)) {
mp->busy = dispc_mgr_go_busy(i);

if (!mp->busy)
mp->shadow_dirty = false;
if (!mp->busy)
mgr_clear_shadow_dirty(mgr);
} else {
if (!mp->updating)
mgr_clear_shadow_dirty(mgr);
}
}

dss_write_regs();
Expand Down

0 comments on commit 7609893

Please sign in to comment.