Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+28 −24
Original line number Diff line number Diff line
@@ -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;
				mgr_clear_shadow_dirty(mgr);
		} else {
			if (!mp->updating)
				mgr_clear_shadow_dirty(mgr);
		}
	}

	dss_write_regs();