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);

Reply via email to