Skip to content

Commit

Permalink
OMAPDSS: APPLY: fix clearing shadow dirty flag with manual update
Browse files Browse the repository at this point in the history
Currently the shadow-dirty flags for manual update displays is cleared
in the apply_irq_handler when an update has finished. This is not
correct, as the shadow registers are taken into use (i.e. after that
they are not dirty) when the update is started.

Move the mgr_clear_shadow_dirty() call from apply_irq_handler to
dss_mgr_start_update() to fix this.

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
  • Loading branch information
Tomi Valkeinen committed Mar 13, 2012
1 parent 001b7f3 commit df01d53
Showing 1 changed file with 18 additions and 19 deletions.
37 changes: 18 additions & 19 deletions drivers/video/omap2/dss/apply.c
Original file line number Diff line number Diff line change
Expand Up @@ -685,6 +685,22 @@ static void dss_set_go_bits(void)

}

static void mgr_clear_shadow_dirty(struct omap_overlay_manager *mgr)
{
struct omap_overlay *ovl;
struct mgr_priv_data *mp;
struct ovl_priv_data *op;

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

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

void dss_mgr_start_update(struct omap_overlay_manager *mgr)
{
struct mgr_priv_data *mp = get_mgr_priv(mgr);
Expand Down Expand Up @@ -713,6 +729,8 @@ void dss_mgr_start_update(struct omap_overlay_manager *mgr)

dispc_mgr_enable(mgr->id, true);

mgr_clear_shadow_dirty(mgr);

spin_unlock_irqrestore(&data_lock, flags);
}

Expand Down Expand Up @@ -756,22 +774,6 @@ static void dss_unregister_vsync_isr(void)
dss_data.irq_enabled = false;
}

static void mgr_clear_shadow_dirty(struct omap_overlay_manager *mgr)
{
struct omap_overlay *ovl;
struct mgr_priv_data *mp;
struct ovl_priv_data *op;

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

list_for_each_entry(ovl, &mgr->overlays, list) {
op = get_ovl_priv(ovl);
op->shadow_info_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();
Expand Down Expand Up @@ -801,9 +803,6 @@ static void dss_apply_irq_handler(void *data, u32 mask)

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

Expand Down

0 comments on commit df01d53

Please sign in to comment.