mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-18 17:54:13 +08:00
OMAPDSS: APPLY: fix clearing shadow dirty flag with manual update
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>
This commit is contained in:
parent
001b7f3ecd
commit
df01d53068
@ -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);
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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();
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user