summaryrefslogtreecommitdiff
path: root/recipes/linux/linux-omap/mru-enable-overlay-optimalization.diff
diff options
context:
space:
mode:
Diffstat (limited to 'recipes/linux/linux-omap/mru-enable-overlay-optimalization.diff')
-rw-r--r--recipes/linux/linux-omap/mru-enable-overlay-optimalization.diff117
1 files changed, 0 insertions, 117 deletions
diff --git a/recipes/linux/linux-omap/mru-enable-overlay-optimalization.diff b/recipes/linux/linux-omap/mru-enable-overlay-optimalization.diff
deleted file mode 100644
index d027c53d6b..0000000000
--- a/recipes/linux/linux-omap/mru-enable-overlay-optimalization.diff
+++ /dev/null
@@ -1,117 +0,0 @@
-From: Mans Rullgard <mans@mansr.com>
-Date: Fri, 29 Aug 2008 01:45:26 +0000 (+0100)
-Subject: OMAP: Enable overlay optimisation
-X-Git-Url: http://git.mansr.com/?p=linux-omap;a=commitdiff_plain;h=7e052af7e4c73dc450412486ad37eb529e725dc7
-
-OMAP: Enable overlay optimisation
-
-This enables the overlay optimisation feature when the video
-overlay is active. This reduces memory bandwidth used by the
-display subsystem, improving overall performance.
-
-Signed-off-by: Mans Rullgard <mans@mansr.com>
----
-
-diff --git a/drivers/video/omap/dispc.c b/drivers/video/omap/dispc.c
-index 888d2c2..0f0b2e5 100644
---- a/drivers/video/omap/dispc.c
-+++ b/drivers/video/omap/dispc.c
-@@ -315,6 +315,60 @@ void omap_dispc_enable_digit_out(int enable)
- }
- EXPORT_SYMBOL(omap_dispc_enable_digit_out);
-
-+#define MIN(a, b) ((a)<(b)?(a):(b))
-+#define MAX(a, b) ((a)>(b)?(a):(b))
-+
-+static void setup_overlay_opt(void)
-+{
-+ struct fb_info **fbi = dispc.fbdev->fb_info;
-+ struct omapfb_plane_struct *gfx, *vid;
-+ struct fb_var_screeninfo *gvar;
-+ unsigned gx, gx2, gy, gy2, gw, gh;
-+ unsigned vx, vx2, vy, vy2, vw, vh;
-+ unsigned bpp, skip;
-+ static unsigned last_skip;
-+
-+ if (!fbi[0] || !fbi[1])
-+ return;
-+
-+ gfx = fbi[0]->par;
-+ vid = fbi[1]->par;
-+ gvar = &fbi[0]->var;
-+
-+ gx = gfx->info.pos_x;
-+ gy = gfx->info.pos_y;
-+ gw = gfx->info.out_width;
-+ gh = gfx->info.out_height;
-+ vx = vid->info.pos_x;
-+ vy = vid->info.pos_y;
-+ vw = vid->info.out_width;
-+ vh = vid->info.out_height;
-+ gx2 = gx + gw;
-+ gy2 = gy + gh;
-+ vx2 = vx + vw;
-+ vy2 = vy + vh;
-+ bpp = gvar->bits_per_pixel / 8;
-+
-+ if (!gfx->info.enabled || !vid->info.enabled ||
-+ dispc.color_key.key_type != OMAPFB_COLOR_KEY_DISABLED) {
-+ skip = 0;
-+ } else if (vx <= gx && vx2 >= gx2) {
-+ unsigned y = MIN(gy2, vy2) - MAX(gy, vy);
-+ skip = y * gvar->xres_virtual * bpp;
-+ } else if (vx <= gx || vx2 >= gx2) {
-+ unsigned x = MIN(gx2, vx2) - MAX(gx, vx);
-+ skip = x * bpp;
-+ } else {
-+ skip = vw * bpp + 1;
-+ }
-+
-+ if (skip != last_skip) {
-+ last_skip = skip;
-+ dispc_write_reg(DISPC_GFX_WINDOW_SKIP, skip);
-+ MOD_REG_FLD(DISPC_CONTROL, 1<<12, !!skip<<12);
-+ }
-+}
-+
- static inline int _setup_plane(int plane, int channel_out,
- u32 paddr, int screen_width,
- int pos_x, int pos_y, int width, int height,
-@@ -437,6 +491,9 @@ static inline int _setup_plane(int plane, int channel_out,
-
- dispc_write_reg(ri_reg[plane], (screen_width - width) * bpp / 8 + 1);
-
-+ if (plane < 2)
-+ setup_overlay_opt();
-+
- MOD_REG_FLD(DISPC_CONTROL, 1<<5, 1<<5);
-
- return height * screen_width * bpp / 8;
-@@ -585,11 +642,19 @@ static int omap_dispc_enable_plane(int plane, int enable)
- const u32 at_reg[] = { DISPC_GFX_ATTRIBUTES,
- DISPC_VID1_BASE + DISPC_VID_ATTRIBUTES,
- DISPC_VID2_BASE + DISPC_VID_ATTRIBUTES };
-+ struct omapfb_plane_struct *pi;
-+
- if ((unsigned int)plane > dispc.mem_desc.region_cnt)
- return -EINVAL;
-
-+ pi = dispc.fbdev->fb_info[plane]->par;
-+ pi->info.enabled = enable;
-+
- enable_lcd_clocks(1);
- MOD_REG_FLD(at_reg[plane], 1, enable ? 1 : 0);
-+ if (plane < 2)
-+ setup_overlay_opt();
-+ MOD_REG_FLD(DISPC_CONTROL, 1<<5, 1<<5);
- enable_lcd_clocks(0);
-
- return 0;
-@@ -633,6 +698,7 @@ static int omap_dispc_set_color_key(struct omapfb_color_key *ck)
- if (val != 0)
- dispc_write_reg(tr_reg, ck->trans_key);
- dispc_write_reg(df_reg, ck->background);
-+ setup_overlay_opt();
- enable_lcd_clocks(0);
-
- dispc.color_key = *ck;