From b4c92f36c0368fe9bc7a780bc6ca9fe9ef199c55 Mon Sep 17 00:00:00 2001 From: Ari Hirvonen Date: Thu, 30 Dec 2010 15:27:28 +0200 Subject: [PATCH] video: tegra: fix three overlay window blending Change-Id: I36e2540b5b98817b87efbe4ca2b1f4d4f19ceba4 Signed-off-by: Michael I. Gold --- drivers/video/tegra/dc/dc.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/video/tegra/dc/dc.c b/drivers/video/tegra/dc/dc.c index 3c3a4754b7dc..946d3da7dc2c 100644 --- a/drivers/video/tegra/dc/dc.c +++ b/drivers/video/tegra/dc/dc.c @@ -369,7 +369,7 @@ static int get_topmost_window(u32 *depths, unsigned long *wins) { int idx, best = -1; - for_each_set_bit(idx, wins, sizeof(*wins)) { + for_each_set_bit(idx, wins, DC_N_WINDOWS) { if (best == -1 || depths[idx] < depths[best]) best = idx; } @@ -406,13 +406,15 @@ static u32 blend_2win(int idx, unsigned long behind_mask, u32* flags, int xy) static u32 blend_3win(int idx, unsigned long behind_mask, u32* flags) { unsigned long infront_mask; + int first; infront_mask = ~(behind_mask | BIT(idx)); infront_mask &= (BIT(DC_N_WINDOWS) - 1); + first = ffs(infront_mask) - 1; if (!infront_mask) return blend_topwin(flags[idx]); - else if (behind_mask && flags[ffs(infront_mask)]) + else if (behind_mask && first != -1 && flags[first]) return BLEND(NOKEY, DEPENDANT, 0x00, 0x00); else return BLEND(NOKEY, FIX, 0x0, 0x0); -- 2.34.1