From 9072ad536a87fac5438d0e8a493d5c6d63b8c1fc Mon Sep 17 00:00:00 2001 From: Tomi Valkeinen Date: Fri, 26 Mar 2010 16:26:37 +0200 Subject: [PATCH] --- yaml --- r: 196756 b: refs/heads/master c: f49a951f8a2dacbbb145b6199297fcc3e493b90f h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/video/omap2/dss/manager.c | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 4c6e294703eb..900f428a1867 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 279fcd48c4a426050422b2d196fd99c2b5ae7d71 +refs/heads/master: f49a951f8a2dacbbb145b6199297fcc3e493b90f diff --git a/trunk/drivers/video/omap2/dss/manager.c b/trunk/drivers/video/omap2/dss/manager.c index 0820986d4a68..32ec2ff2e9cf 100644 --- a/trunk/drivers/video/omap2/dss/manager.c +++ b/trunk/drivers/video/omap2/dss/manager.c @@ -940,6 +940,22 @@ static int configure_dispc(void) return r; } +/* Make the coordinates even. There are some strange problems with OMAP and + * partial DSI update when the update widths are odd. */ +static void make_even(u16 *x, u16 *w) +{ + u16 x1, x2; + + x1 = *x; + x2 = *x + *w; + + x1 &= ~1; + x2 = ALIGN(x2, 2); + + *x = x1; + *w = x2 - x1; +} + /* Configure dispc for partial update. Return possibly modified update * area */ void dss_setup_partial_planes(struct omap_dss_device *dssdev, @@ -968,6 +984,8 @@ void dss_setup_partial_planes(struct omap_dss_device *dssdev, return; } + make_even(&x, &w); + spin_lock_irqsave(&dss_cache.lock, flags); /* We need to show the whole overlay if it is scaled. So look for @@ -1029,6 +1047,8 @@ void dss_setup_partial_planes(struct omap_dss_device *dssdev, w = x2 - x1; h = y2 - y1; + make_even(&x, &w); + DSSDBG("changing upd area due to ovl(%d) scaling %d,%d %dx%d\n", i, x, y, w, h); }