From: James S. <jsi...@us...> - 2002-06-21 22:51:56
|
Update of /cvsroot/linuxconsole/ruby/linux/drivers/video In directory usw-pr-cvs1:/tmp/cvs-serv29302/linux/drivers/video Modified Files: dnfb.c fm2fb.c hpfb.c q40fb.c vfb.c Log Message: Updates to fbdev drivers. Index: dnfb.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/video/dnfb.c,v retrieving revision 1.7 retrieving revision 1.8 diff -u -d -r1.7 -r1.8 --- dnfb.c 15 Jun 2002 19:17:10 -0000 1.7 +++ dnfb.c 21 Jun 2002 22:51:53 -0000 1.8 @@ -112,7 +112,7 @@ /* frame buffer operations */ -static int dn_fb_blank(int blank, struct fb_info *info); +static int dnfb_blank(int blank, struct fb_info *info); static void dnfb_copyarea(struct fb_info *info, struct fb_copyarea *area); static struct fb_ops dn_fb_ops = { @@ -157,7 +157,6 @@ { int incr, y_delta, pre_read = 0, x_end, x_word_count; - int x_count, y_count; ushort *src, dummy; uint start_mask, end_mask, dest; short i, j; @@ -165,13 +164,13 @@ incr = (area->dy <= area->sy) ? 1 : -1; src = - (ushort *) (info->screen_base + area->sy * info->fix.next_line + + (ushort *) (info->screen_base + area->sy * info->fix.line_length + (area->sx >> 4)); - dest = area->dy * (info->fix.next_line >> 1) + (area->dx >> 4); + dest = area->dy * (info->fix.line_length >> 1) + (area->dx >> 4); if (incr > 0) { - y_delta = (info->fix.next_line * 8) - area->sx - x_count; - x_end = area->dx + x_count - 1; + y_delta = (info->fix.line_length * 8) - area->sx - area->width; + x_end = area->dx + area->width - 1; x_word_count = (x_end >> 4) - (area->dx >> 4) + 1; start_mask = 0xffff0000 >> (area->dx & 0xf); end_mask = 0x7ffff >> (x_end & 0xf); @@ -180,8 +179,8 @@ if ((area->dx & 0xf) < (area->sx & 0xf)) pre_read = 1; } else { - y_delta = -((info->fix.next_line * 8) - area->sx - x_count); - x_end = area->dx - x_count + 1; + y_delta = -((info->fix.line_length * 8) - area->sx - area->width); + x_end = area->dx - area->width + 1; x_word_count = (area->dx >> 4) - (x_end >> 4) + 1; start_mask = 0x7ffff >> (area->dx & 0xf); end_mask = 0xffff0000 >> (x_end & 0xf); @@ -191,7 +190,7 @@ pre_read = 1; } - for (i = 0; i < y_count; i++) { + for (i = 0; i < area->height; i++) { outb(0xc | (dest >> 16), AP_CONTROL_3A); @@ -238,6 +237,9 @@ fb_info.fbops = &dn_fb_ops; fb_info.fix = dnfb_fix; fb_info.var = dnfb_var; + + fb_alloc_cmap(&fb_info.cmap, 2, 0); + fb_info.screen_base = (u_char *) fb_info.fix.smem_start; err = register_framebuffer(&fb_info); Index: fm2fb.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/video/fm2fb.c,v retrieving revision 1.11 retrieving revision 1.12 diff -u -d -r1.11 -r1.12 --- fm2fb.c 3 Jun 2002 22:44:58 -0000 1.11 +++ fm2fb.c 21 Jun 2002 22:51:53 -0000 1.12 @@ -127,6 +127,8 @@ static volatile unsigned char *fm2fb_reg; +#define arraysize(x) (sizeof(x)/sizeof(*(x))) + static struct fb_info fb_info; static u32 pseudo_palette[17]; @@ -171,6 +173,11 @@ static struct fb_ops fm2fb_ops = { owner: THIS_MODULE, + fb_get_fix: gen_get_fix, + fb_get_var: gen_get_var, + fb_set_var: gen_set_var, + fb_get_cmap: gen_get_cmap, + fb_set_cmap: gen_set_cmap, fb_setcolreg: fm2fb_setcolreg, fb_blank: fm2fb_blank, fb_fillrect: cfb_fillrect, @@ -188,8 +195,9 @@ if (!blank) t |= FRAMEMASTER_ENABLE | FRAMEMASTER_NOLACE; fm2fb_reg[0] = t; + return 0; } - + /* * Set a single color register. The values supplied are already * rounded down to the hardware's capabilities (according to the @@ -262,6 +270,8 @@ fb_info.pseudo_palette = pseudo_palette; fb_info.fix = fb_fix; fb_info.flags = FBINFO_FLAG_DEFAULT; + + fb_alloc_cmap(&fb_info.cmap, 16, 0); if (register_framebuffer(&fb_info) < 0) return -EINVAL; Index: hpfb.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/video/hpfb.c,v retrieving revision 1.11 retrieving revision 1.12 diff -u -d -r1.11 -r1.12 --- hpfb.c 3 Jun 2002 22:44:58 -0000 1.11 +++ hpfb.c 21 Jun 2002 22:51:53 -0000 1.12 @@ -47,6 +47,7 @@ visual: FB_VISUAL_PSEUDOCOLOR, line_length: 1024, accel: FB_ACCEL_NONE, +}; static struct fb_var_screeninfo hpfb_defined = { xres: 1024, @@ -154,7 +155,9 @@ fb_info.flags = FBINFO_FLAG_DEFAULT; fb_info.var = hpfb_defined; fb_info.fix = hpfb_fix; - fb_info.screen_base = hpfb_fix.smem_start; + fb_info.screen_base = (char *)hpfb_fix.smem_start; // FIXME + + fb_alloc_cmap(&fb_info.cmap, 256, 0); if (register_framebuffer(&fb_info) < 0) return 1; Index: q40fb.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/video/q40fb.c,v retrieving revision 1.9 retrieving revision 1.10 diff -u -d -r1.9 -r1.10 --- q40fb.c 3 Jun 2002 22:44:58 -0000 1.9 +++ q40fb.c 21 Jun 2002 22:51:53 -0000 1.10 @@ -39,7 +39,7 @@ type: FB_TYPE_PACKED_PIXELS, visual: FB_VISUAL_TRUECOLOR, line_length: 1024*2, - accel_flags: FB_ACCEL_NONE, + accel: FB_ACCEL_NONE, }; static struct fb_var_screeninfo q40fb_var __initdata = { @@ -82,14 +82,14 @@ * Return != 0 for invalid regno. */ - red >>=11; - green >>=11; - blue >>=10; + red>>=11; + green>>=11; + blue>>=10; if (regno < 16) { - info->pseudo_palette[regno] = ((red & 31) <<6) | - ((green & 31) << 11) | - (blue & 63); + ((u16 *)info->pseudo_palette)[regno] = ((red & 31) <<6) | + ((green & 31) << 11) | + (blue & 63); } return 0; } @@ -110,6 +110,8 @@ fb_info.pseudo_palette = pseudo_palette; fb_info.screen_base = (char *) q40fb_fix.smem_start; + fb_alloc_cmap(&fb_info.cmap, 16, 0); + master_outb(3, DISPLAY_CONTROL_REG); if (register_framebuffer(&fb_info) < 0) { Index: vfb.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/video/vfb.c,v retrieving revision 1.34 retrieving revision 1.35 diff -u -d -r1.34 -r1.35 --- vfb.c 3 Jun 2002 22:44:58 -0000 1.34 +++ vfb.c 21 Jun 2002 22:51:53 -0000 1.35 @@ -87,7 +87,7 @@ static int vfb_set_par(struct fb_info *info); static int vfb_setcolreg(u_int regno, u_int red, u_int green, u_int blue, u_int transp, struct fb_info *info); -static int vfb_pan_display(struct fb_var_screeninfo *var, +static int vfb_pan_display(struct fb_var_screeninfo *var, int con, struct fb_info *info); static int vfb_mmap(struct fb_info *info, struct file *file, struct vm_area_struct *vma); @@ -437,6 +437,8 @@ fb_info.fix = vfb_fix; fb_info.pseudo_palette = &vfb_pseudo_palette; fb_info.flags = FBINFO_FLAG_DEFAULT; + + fb_alloc_cmap(&fb_info.cmap, 256, 0); if (register_framebuffer(&fb_info) < 0) { vfree(videomemory); |