Commit 7609893c authored by Tomi Valkeinen's avatar Tomi Valkeinen

OMAPDSS: APPLY: clean up isr_handler

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: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
parent 34861378
...@@ -508,47 +508,51 @@ static void dss_unregister_vsync_isr(void) ...@@ -508,47 +508,51 @@ static void dss_unregister_vsync_isr(void)
dss_data.irq_enabled = false; 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 *ovl;
struct omap_overlay_manager *mgr;
struct mgr_priv_data *mp; struct mgr_priv_data *mp;
struct ovl_priv_data *op; 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(); const int num_mgrs = dss_feat_get_num_mgrs();
int i; int i;
spin_lock(&data_lock); spin_lock(&data_lock);
/* clear busy, updating flags, shadow_dirty flags */
for (i = 0; i < num_mgrs; i++) { for (i = 0; i < num_mgrs; i++) {
struct omap_overlay_manager *mgr;
struct mgr_priv_data *mp;
mgr = omap_dss_get_overlay_manager(i); mgr = omap_dss_get_overlay_manager(i);
mp = get_mgr_priv(mgr); mp = get_mgr_priv(mgr);
mp->busy = dispc_mgr_go_busy(i); if (!mp->enabled)
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)
continue; continue;
mp = get_mgr_priv(ovl->manager); mp->updating = dispc_mgr_is_enabled(i);
if (!mp->busy) {
op->shadow_dirty = false;
op->shadow_extra_info_dirty = false;
}
}
for (i = 0; i < num_mgrs; ++i) { if (!mgr_manual_update(mgr)) {
mgr = omap_dss_get_overlay_manager(i); mp->busy = dispc_mgr_go_busy(i);
mp = get_mgr_priv(mgr);
if (!mp->busy) if (!mp->busy)
mp->shadow_dirty = false; mgr_clear_shadow_dirty(mgr);
} else {
if (!mp->updating)
mgr_clear_shadow_dirty(mgr);
}
} }
dss_write_regs(); dss_write_regs();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment