トップ «前の日(10-30) 最新 次の日(11-01)» 追記

Masa's blog

検索キーワード:

2012年10月31日 w100fb double buffering patch for linux-3.1.10(zaurus ARMedslack-14.0)

_ double buffering patch for w100fb.c of linux-3.1.10

This double buffering patch for w100fb.c is based on w100_pan_display - steleto's diary.

*** drivers/video/w100fb.c.ORG	2012-10-30 12:21:33.240038082 +0900
--- drivers/video/w100fb.c	2012-10-30 13:23:10.080014686 +0900
***************
*** 520,526 ****
  		par->mode = w100fb_get_mode(par, &par->xres, &par->yres, 0);

  		info->fix.visual = FB_VISUAL_TRUECOLOR;
! 		info->fix.ypanstep = 0;
  		info->fix.ywrapstep = 0;
  		info->fix.line_length = par->xres * BITS_PER_PIXEL / 8;

--- 520,526 ----
  		par->mode = w100fb_get_mode(par, &par->xres, &par->yres, 0);

  		info->fix.visual = FB_VISUAL_TRUECOLOR;
! 		info->fix.ypanstep = 1;
  		info->fix.ywrapstep = 0;
  		info->fix.line_length = par->xres * BITS_PER_PIXEL / 8;

***************
*** 540,545 ****
--- 540,580 ----
  }


+ static int w100fb_pan_display(struct fb_var_screeninfo *var, struct fb_info *info)
+ {
+        struct w100fb_par *par = info->par;
+        int yres = 0, offset = 0;
+
+        if (par->xres == par->mode->xres) {
+                if (par->flip) {
+                        /* 180 degree */
+                        yres = info->var.yres + var->yoffset;
+                        offset = (info->var.xres * yres) - 1;
+                } else {
+                        /*   0 degree */
+                        offset = info->var.xres * var->yoffset;
+                }
+        } else {
+                if (par->flip) {
+                        /* 270 degree */
+                        offset = info->var.xres * var->yoffset - 1;
+                } else {
+                        /*  90 degree */
+                        yres = info->var.yres + var->yoffset;
+                        offset = par->xres * (yres - 1);
+                }
+        }
+
+        w100_update_disable();
+
+        writel(W100_FB_BASE + ((offset * BITS_PER_PIXEL / 8) & ~0x03UL),
+               remapped_regs + mmGRAPHIC_OFFSET);
+
+        w100_update_enable();
+
+        return 0;
+ }
+
  /*
   *  Frame buffer operations
   */
***************
*** 553,558 ****
--- 588,594 ----
  	.fb_copyarea  = w100fb_copyarea,
  	.fb_imageblit = cfb_imageblit,
  	.fb_sync      = w100fb_sync,
+ 	.fb_pan_display = w100fb_pan_display,
  };

  #ifdef CONFIG_PM