Here i paste some patches to OpenEZX old 2.6.24 kernel...But makes the
rootfs images builded for A780 with graphicals parts runs on
A1200....anybody can port it to news kernels.....
Its named android-*.patch because is projected to run Android on
A1200,but works in anothers rootfs.
I will paste one-by-one in my emails....
android-framebuffer.patch
--- offical/linux-2.6.24/drivers/video/pxafb.c 2008-08-03
16:42:41.186365264 +0800
+++ android/linux-2.6.24/drivers/video/pxafb.c 2008-08-03
15:32:43.000000000 +0800
@@ -48,6 +48,8
@@
#include
<asm/arch/bitfield.h>
#include
<asm/arch/pxafb.h>
+#define C_PAN_DISPLAY
10
+
/*
* Complain if VAR is out of
range.
*/
@@ -276,7 +278,7
@@
var->sync =
mode->sync;
var->grayscale =
mode->cmap_greyscale;
var->xres_virtual =
var->xres;
- var->yres_virtual =
var->yres;
+ var->yres_virtual = 2 *
var->yres;
}
/*
@@ -512,6 +514,14
@@
return
-EINVAL;
}
+static int pxafb_pan_display(struct fb_var_screeninfo *var, struct
fb_info *info)
+{
+ struct pxafb_info *fbi = (struct pxafb_info
*)info;
+
+ fbi->fb.var.yoffset =
var->yoffset;
+ pxafb_schedule_work(fbi,
C_PAN_DISPLAY);
+}
+
static struct fb_ops pxafb_ops =
{
.owner =
THIS_MODULE,
.fb_check_var =
pxafb_check_var,
@@ -522,6 +532,7
@@
.fb_imageblit =
cfb_imageblit,
.fb_blank =
pxafb_blank,
.fb_mmap =
pxafb_mmap,
+ .fb_pan_display =
pxafb_pan_display,
};
/*
@@ -890,6 +901,7
@@
FDADR0 =
fbi->fdadr0;
FDADR1 =
fbi->fdadr1;
+ DFBR0 = fbi->fdadr0 |
1;
LCCR0 |=
LCCR0_ENB;
pr_debug("FDADR0 0x%08x\n", (unsigned int)
FDADR0);
@@ -1034,6 +1046,15
@@
__pxafb_backlight_power(fbi,
1);
}
break;
+
+ case
C_PAN_DISPLAY:
+ if (fbi->dmadesc_fbhigh_cpu->fsadr == fbi->screen_dma)
{
+ fbi->dmadesc_fbhigh_cpu->fsadr = fbi->screen_dma
+ fbi->fb.var.yoffset * fbi->fb.fix.line_length;
+ } else
{
+ fbi->dmadesc_fbhigh_cpu->fsadr = fbi->screen_dma;
+ }
+ break;
+
}
up(&fbi->ctrlr_sem);
}
@@ -1160,6 +1181,7 @@
/* prevent initial garbage on screen */
memset(fbi->map_cpu, 0, fbi->map_size);
fbi->fb.screen_base = fbi->map_cpu + PAGE_SIZE;
+ fbi->fb.screen_size = fbi->map_size;
fbi->screen_dma = fbi->map_dma + PAGE_SIZE;
/*
* FIXME: this is actually the wrong thing to place in
@@ -1211,14 +1233,14 @@
fbi->fb.fix.type = FB_TYPE_PACKED_PIXELS;
fbi->fb.fix.type_aux = 0;
fbi->fb.fix.xpanstep = 0;
- fbi->fb.fix.ypanstep = 0;
+ fbi->fb.fix.ypanstep = 1;
fbi->fb.fix.ywrapstep = 0;
fbi->fb.fix.accel = FB_ACCEL_NONE;
fbi->fb.var.nonstd = mode->nonstd;
fbi->fb.var.activate = FB_ACTIVATE_NOW;
- fbi->fb.var.height = -1;
- fbi->fb.var.width = -1;
+ fbi->fb.var.height = 320;
+ fbi->fb.var.width = 240;
fbi->fb.var.accel_flags = 0;
fbi->fb.var.vmode = FB_VMODE_NONINTERLACED;
@@ -1244,7 +1266,7 @@
for (i = 0; i < inf->num_modes; i++) {
smemlen = mode[i].xres * mode[i].yres * (mode[i].nonstd
? mode[i].nonstd : mode[i].bpp) / 8;
if (smemlen > fbi->fb.fix.smem_len)
- fbi->fb.fix.smem_len = smemlen;
+ fbi->fb.fix.smem_len = 2 * smemlen;
}
init_waitqueue_head(&fbi->ctrlr_wait);