On Mon, 11 Dec 2006, Michael Schmitz wrote: > my final atafb version (modedb set up for Atari modes, although I'm not > sure the timing data make much sense). Leftover dead code removed. Same > quirks as in previous versions (logo uses amifb's cfb driver which goes > slightly wrong). > > Signed-Off-By: <[EMAIL PROTECTED]>
A few more fixes (compile-tested only): - Use `unsigned int' instead of `unsigned' - Correct type of second parameter of fb_hwswitch.pan_display() - struct pt_regs * is gone - Use C99 named initializers - Kill unused fb_update_var() and atafb_set_var() - Kill a few more unused local variables - Move atafb_init() so we don't need a forward declaration for atafb_setup() - atafb_iplan2p*(): Kill pointer assignment warnings - Fix comment Signed-off-by: Geert Uytterhoeven <[EMAIL PROTECTED]> --- linux-m68k-2.6.19.orig/drivers/video/atafb.c +++ linux-m68k-2.6.19/drivers/video/atafb.c @@ -93,9 +93,9 @@ static int atafb_check_var(struct fb_var_screeninfo *var, struct fb_info *info); static int atafb_set_par(struct fb_info *info); -static int atafb_setcolreg(unsigned regno, unsigned red, unsigned green, - unsigned blue, unsigned transp, - struct fb_info *info); +static int atafb_setcolreg(unsigned int regno, unsigned int red, + unsigned int green, unsigned int blue, + unsigned int transp, struct fb_info *info); static int atafb_blank(int blank, struct fb_info *info); static int atafb_pan_display(struct fb_var_screeninfo *var, struct fb_info *info); @@ -414,13 +414,13 @@ static struct fb_hwswitch { struct atafb_par *par ); void (*get_par)( struct atafb_par *par ); void (*set_par)( struct atafb_par *par ); - int (*getcolreg)( unsigned regno, unsigned *red, - unsigned *green, unsigned *blue, - unsigned *transp, struct fb_info *info ); + int (*getcolreg)( unsigned int regno, unsigned int *red, + unsigned int *green, unsigned int *blue, + unsigned int *transp, struct fb_info *info ); void (*set_screen_base)(void *s_base); int (*blank)( int blank_mode ); int (*pan_display)( struct fb_var_screeninfo *var, - struct atafb_par *par); + struct fb_info *info); } *fbhw; static char *autodetect_names[] = {"autodetect", NULL}; @@ -856,9 +856,9 @@ static void tt_set_par( struct atafb_par } -static int tt_getcolreg(unsigned regno, unsigned *red, - unsigned *green, unsigned *blue, - unsigned *transp, struct fb_info *info) +static int tt_getcolreg(unsigned int regno, unsigned int *red, + unsigned int *green, unsigned int *blue, + unsigned int *transp, struct fb_info *info) { int t, col; @@ -884,9 +884,9 @@ static int tt_getcolreg(unsigned regno, } -static int tt_setcolreg(unsigned regno, unsigned red, - unsigned green, unsigned blue, - unsigned transp, struct fb_info *info) +static int tt_setcolreg(unsigned int regno, unsigned int red, + unsigned int green, unsigned int blue, + unsigned int transp, struct fb_info *info) { if ((shifter_tt.tt_shiftmode & TT_SHIFTER_MODEMASK) == TT_SHIFTER_STHIGH) regno += 254; @@ -1718,7 +1718,7 @@ static void falcon_set_par( struct atafb } -static irqreturn_t falcon_vbl_switcher( int irq, void *dummy, struct pt_regs *fp ) +static irqreturn_t falcon_vbl_switcher( int irq, void *dummy ) { struct falcon_hw *hw = &f_new_mode; @@ -1812,9 +1812,9 @@ static int falcon_pan_display( struct fb } -static int falcon_getcolreg( unsigned regno, unsigned *red, - unsigned *green, unsigned *blue, - unsigned *transp, struct fb_info *info ) +static int falcon_getcolreg( unsigned int regno, unsigned int *red, + unsigned int *green, unsigned int *blue, + unsigned int *transp, struct fb_info *info ) { unsigned long col; if (regno > 255) @@ -1832,9 +1832,9 @@ static int falcon_getcolreg( unsigned re } -static int falcon_setcolreg( unsigned regno, unsigned red, - unsigned green, unsigned blue, - unsigned transp, struct fb_info *info ) +static int falcon_setcolreg( unsigned int regno, unsigned int red, + unsigned int green, unsigned int blue, + unsigned int transp, struct fb_info *info ) { if (regno > 255) return 1; @@ -2130,9 +2130,9 @@ static void stste_set_par( struct atafb_ } -static int stste_getcolreg(unsigned regno, unsigned *red, - unsigned *green, unsigned *blue, - unsigned *transp, struct fb_info *info) +static int stste_getcolreg(unsigned int regno, unsigned int *red, + unsigned int *green, unsigned int *blue, + unsigned int *transp, struct fb_info *info) { unsigned col, t; @@ -2166,9 +2166,9 @@ static int stste_getcolreg(unsigned regn } -static int stste_setcolreg(unsigned regno, unsigned red, - unsigned green, unsigned blue, - unsigned transp, struct fb_info *info) +static int stste_setcolreg(unsigned int regno, unsigned int red, + unsigned int green, unsigned int blue, + unsigned int transp, struct fb_info *info) { if (regno > 15) return 1; @@ -2412,9 +2412,9 @@ static void ext_set_par( struct atafb_pa tmp=INB(0x3da); \ } while (0) -static int ext_getcolreg( unsigned regno, unsigned *red, - unsigned *green, unsigned *blue, - unsigned *transp, struct fb_info *info ) +static int ext_getcolreg( unsigned int regno, unsigned int *red, + unsigned int *green, unsigned int *blue, + unsigned int *transp, struct fb_info *info ) { if (! external_vgaiobase) return 1; @@ -2426,9 +2426,9 @@ static int ext_getcolreg( unsigned regno return 0; } -static int ext_setcolreg( unsigned regno, unsigned red, - unsigned green, unsigned blue, - unsigned transp, struct fb_info *info ) +static int ext_setcolreg( unsigned int regno, unsigned int red, + unsigned int green, unsigned int blue, + unsigned int transp, struct fb_info *info ) { unsigned char colmask = (1 << external_bitspercol) - 1; @@ -2514,32 +2514,56 @@ static int pan_display( struct fb_var_sc #ifdef ATAFB_TT static struct fb_hwswitch tt_switch = { - tt_detect, tt_encode_fix, tt_decode_var, tt_encode_var, - tt_get_par, tt_set_par, tt_getcolreg, - set_screen_base, NULL, pan_display + .detect = tt_detect, + .encode_fix = tt_encode_fix, + .decode_var = tt_decode_var, + .encode_var = tt_encode_var, + .get_par = tt_get_par, + .set_par = tt_set_par, + .getcolreg = tt_getcolreg, + .set_screen_base = set_screen_base, + .pan_display = pan_display }; #endif #ifdef ATAFB_FALCON static struct fb_hwswitch falcon_switch = { - falcon_detect, falcon_encode_fix, falcon_decode_var, falcon_encode_var, - falcon_get_par, falcon_set_par, falcon_getcolreg, - set_screen_base, falcon_blank, falcon_pan_display + .detect = falcon_detect, + .encode_fix = falcon_encode_fix, + .decode_var = falcon_decode_var, + .encode_var = falcon_encode_var, + .get_par = falcon_get_par, + .set_par = falcon_set_par, + .getcolreg = falcon_getcolreg, + .set_screen_base = set_screen_base, + .blank = falcon_blank, + .pan_display = falcon_pan_display }; #endif #ifdef ATAFB_STE static struct fb_hwswitch st_switch = { - stste_detect, stste_encode_fix, stste_decode_var, stste_encode_var, - stste_get_par, stste_set_par, stste_getcolreg, - stste_set_screen_base, NULL, pan_display + .detect = stste_detect, + .encode_fix = stste_encode_fix, + .decode_var = stste_decode_var, + .encode_var = stste_encode_var, + .get_par = stste_get_par, + .set_par = stste_set_par, + .getcolreg = stste_getcolreg, + .set_screen_base = stste_set_screen_base, + .pan_display = pan_display }; #endif #ifdef ATAFB_EXT static struct fb_hwswitch ext_switch = { - ext_detect, ext_encode_fix, ext_decode_var, ext_encode_var, - ext_get_par, ext_set_par, ext_getcolreg, NULL, NULL, NULL + .detect = ext_detect, + .encode_fix = ext_encode_fix, + .decode_var = ext_decode_var, + .encode_var = ext_encode_var, + .get_par = ext_get_par, + .set_par = ext_set_par, + .getcolreg = ext_getcolreg, }; #endif @@ -2572,19 +2596,6 @@ static void ata_set_par( struct atafb_pa /* used for hardware scrolling */ static int -fb_update_var(struct fb_info *info) -{ - int off=info->var.yoffset*info->var.xres_virtual* - info->var.bits_per_pixel>>3; - - current_par.screen_base=screen_base + off; - - if (fbhw->set_screen_base) - fbhw->set_screen_base(current_par.screen_base); - return 0; -} - -static int do_fb_set_var(struct fb_var_screeninfo *var, int isactive) { int err,activate; @@ -2676,33 +2687,6 @@ atafb_set_disp(struct fb_info *info) } } -static int -atafb_set_var(struct fb_var_screeninfo *var, int con, struct fb_info *info) -{ - int err,oldxres,oldyres,oldbpp,oldxres_virtual, - oldyres_virtual,oldyoffset; - if ((err=do_fb_set_var(var, 1))) - return err; - if ((var->activate & FB_ACTIVATE_MASK) == FB_ACTIVATE_NOW) { - oldxres=info->var.xres; - oldyres=info->var.yres; - oldxres_virtual=info->var.xres_virtual; - oldyres_virtual=info->var.yres_virtual; - oldbpp=info->var.bits_per_pixel; - oldyoffset=info->var.yoffset; - info->var=*var; - if (oldxres != var->xres || oldyres != var->yres - || oldxres_virtual != var->xres_virtual - || oldyres_virtual != var->yres_virtual - || oldbpp != var->bits_per_pixel - || oldyoffset != var->yoffset) { - atafb_set_disp(info); - } - } - var->activate=0; - return 0; -} - static int atafb_setcolreg(u_int regno, u_int red, u_int green, u_int blue, u_int transp, struct fb_info *info) { @@ -2715,8 +2699,6 @@ static int atafb_setcolreg(u_int regno, static int atafb_pan_display(struct fb_var_screeninfo *var, struct fb_info *info) { - int xoffset = var->xoffset; - int yoffset = var->yoffset; int err; if (var->vmode & FB_VMODE_YWRAP) { @@ -2765,8 +2747,7 @@ static void atafb_fillrect(struct fb_inf const struct fb_fillrect *rect) { struct atafb_par *par = (struct atafb_par *)info->par; - int dst_idx, x2, y2; - unsigned long *dst; + int x2, y2; u32 width, height; if (!rect->width || !rect->height) @@ -2805,8 +2786,6 @@ static void atafb_copyarea(struct fb_inf struct atafb_par *par = (struct atafb_par *)info->par; int x2, y2; u32 dx, dy, sx, sy, width, height; - unsigned long *dst, *src; - int dst_idx, src_idx; int rev_copy = 0; /* clip the destination */ @@ -3054,174 +3033,6 @@ check_default_par( int detected_mode ) } -int __init atafb_init(void) -{ - int pad; - int detected_mode; - unsigned int defmode; - unsigned long mem_req; - -#ifndef MODULE - char *option = NULL; - - if (fb_get_options("atafb", &option)) { - return -ENODEV; - } - atafb_setup(option); -#endif - printk("atafb_init: start\n"); - - if (!MACH_IS_ATARI) - return -ENXIO; - - do { -#ifdef ATAFB_EXT - if (external_addr) { - printk("atafb_init: initializing external hw\n"); - fbhw = &ext_switch; - atafb_ops.fb_setcolreg = &ext_setcolreg; - defmode = DEFMODE_EXT; - break; - } -#endif -#ifdef ATAFB_TT - if (ATARIHW_PRESENT(TT_SHIFTER)) { - printk("atafb_init: initializing TT hw\n"); - fbhw = &tt_switch; - atafb_ops.fb_setcolreg = &tt_setcolreg; - defmode = DEFMODE_TT; - break; - } -#endif -#ifdef ATAFB_FALCON - if (ATARIHW_PRESENT(VIDEL_SHIFTER)) { - printk("atafb_init: initializing Falcon hw\n"); - fbhw = &falcon_switch; - atafb_ops.fb_setcolreg = &falcon_setcolreg; - request_irq(IRQ_AUTO_4, falcon_vbl_switcher, IRQ_TYPE_PRIO, - "framebuffer/modeswitch", falcon_vbl_switcher); - defmode = DEFMODE_F30; - break; - } -#endif -#ifdef ATAFB_STE - if (ATARIHW_PRESENT(STND_SHIFTER) || - ATARIHW_PRESENT(EXTD_SHIFTER)) { - printk("atafb_init: initializing ST/E hw\n"); - fbhw = &st_switch; - atafb_ops.fb_setcolreg = &stste_setcolreg; - defmode = DEFMODE_STE; - break; - } - fbhw = &st_switch; - atafb_ops.fb_setcolreg = &stste_setcolreg; - printk("Cannot determine video hardware; defaulting to ST(e)\n"); -#else /* ATAFB_STE */ - /* no default driver included */ - /* Nobody will ever see this message :-) */ - panic("Cannot initialize video hardware"); -#endif - } while (0); - - /* Multisync monitor capabilities */ - /* Atari-TOS defaults if no boot option present */ - if (fb_info.monspecs.hfmin == 0) { - fb_info.monspecs.hfmin = 31000; - fb_info.monspecs.hfmax = 32000; - fb_info.monspecs.vfmin = 58; - fb_info.monspecs.vfmax = 62; - } - - detected_mode = fbhw->detect(); - check_default_par(detected_mode); -#ifdef ATAFB_EXT - if (!external_addr) { -#endif /* ATAFB_EXT */ - mem_req = default_mem_req + ovsc_offset + ovsc_addlen; - mem_req = PAGE_ALIGN(mem_req) + PAGE_SIZE; - screen_base = atari_stram_alloc(mem_req, "atafb"); - if (!screen_base) - panic("Cannot allocate screen memory"); - memset(screen_base, 0, mem_req); - pad = -(unsigned long)screen_base & (PAGE_SIZE-1); - screen_base+=pad; - real_screen_base=screen_base+ovsc_offset; - screen_len = (mem_req - pad - ovsc_offset) & PAGE_MASK; - st_ovsc_switch(); - if (CPU_IS_040_OR_060) { - /* On a '040+, the cache mode of video RAM must be set to - * write-through also for internal video hardware! */ - cache_push(virt_to_phys(screen_base), screen_len); - kernel_set_cachemode(screen_base, screen_len, - IOMAP_WRITETHROUGH); - } - printk("atafb: screen_base %p real_screen_base %p screen_len %ld\n", - screen_base, real_screen_base, screen_len); -#ifdef ATAFB_EXT - } - else { - /* Map the video memory (physical address given) to somewhere - * in the kernel address space. - */ - external_addr = - ioremap_writethrough((unsigned long)external_addr, - external_len); - if (external_vgaiobase) - external_vgaiobase = - (unsigned long)ioremap(external_vgaiobase, 0x10000); - screen_base = - real_screen_base = external_addr; - screen_len = external_len & PAGE_MASK; - memset (screen_base, 0, external_len); - } -#endif /* ATAFB_EXT */ - -// strcpy(fb_info.mode->name, "Atari Builtin "); - fb_info.fbops = &atafb_ops; - // try to set default (detected; requested) var - do_fb_set_var(&atafb_predefined[default_par-1], 1); - // reads hw state into current par, which may not be sane yet - ata_get_par(¤t_par); - fb_info.par = ¤t_par; - // tries to read from HW which may not be initialized yet - // so set sane var first, then call atafb_set_par - atafb_get_var(¤t_var, &fb_info); - fb_info.var = current_var; - fb_info.flags = FBINFO_FLAG_DEFAULT; - - if (!fb_find_mode(&fb_info.var, &fb_info, mode_option, atafb_modedb, - NUM_TOTAL_MODES, &atafb_modedb[defmode], - current_var.bits_per_pixel)) { - return -EINVAL; - } - -// strcat(fb_info.mode->name, fb_var_names[default_par-1][0]); - - atafb_set_disp(&fb_info); - - fb_alloc_cmap(&(fb_info.cmap), 1<<fb_info.var.bits_per_pixel, 0); - - printk("Determined %dx%d, depth %d\n", - fb_info.var.xres, fb_info.var.yres, fb_info.var.bits_per_pixel); - if ((current_var.xres != current_var.xres_virtual) || - (current_var.yres != current_var.yres_virtual)) - printk(" virtual %dx%d\n", - current_var.xres_virtual, current_var.yres_virtual); - - if (register_framebuffer(&fb_info) < 0) - return -EINVAL; - - // FIXME: mode needs setting! - //printk("fb%d: %s frame buffer device, using %dK of video memory\n", - // fb_info.node, fb_info.mode->name, screen_len>>10); - printk("fb%d: frame buffer device, using %dK of video memory\n", - fb_info.node, screen_len>>10); - - /* TODO: This driver cannot be unloaded yet */ - return 0; -} - - #ifdef ATAFB_EXT static void __init atafb_setup_ext(char *spec) { @@ -3484,6 +3295,173 @@ int __init atafb_setup( char *options ) return 0; } + +int __init atafb_init(void) +{ + int pad; + int detected_mode; + unsigned int defmode = 0; + unsigned long mem_req; + +#ifndef MODULE + char *option = NULL; + + if (fb_get_options("atafb", &option)) { + return -ENODEV; + } + atafb_setup(option); +#endif + printk("atafb_init: start\n"); + + if (!MACH_IS_ATARI) + return -ENXIO; + + do { +#ifdef ATAFB_EXT + if (external_addr) { + printk("atafb_init: initializing external hw\n"); + fbhw = &ext_switch; + atafb_ops.fb_setcolreg = &ext_setcolreg; + defmode = DEFMODE_EXT; + break; + } +#endif +#ifdef ATAFB_TT + if (ATARIHW_PRESENT(TT_SHIFTER)) { + printk("atafb_init: initializing TT hw\n"); + fbhw = &tt_switch; + atafb_ops.fb_setcolreg = &tt_setcolreg; + defmode = DEFMODE_TT; + break; + } +#endif +#ifdef ATAFB_FALCON + if (ATARIHW_PRESENT(VIDEL_SHIFTER)) { + printk("atafb_init: initializing Falcon hw\n"); + fbhw = &falcon_switch; + atafb_ops.fb_setcolreg = &falcon_setcolreg; + request_irq(IRQ_AUTO_4, falcon_vbl_switcher, IRQ_TYPE_PRIO, + "framebuffer/modeswitch", falcon_vbl_switcher); + defmode = DEFMODE_F30; + break; + } +#endif +#ifdef ATAFB_STE + if (ATARIHW_PRESENT(STND_SHIFTER) || + ATARIHW_PRESENT(EXTD_SHIFTER)) { + printk("atafb_init: initializing ST/E hw\n"); + fbhw = &st_switch; + atafb_ops.fb_setcolreg = &stste_setcolreg; + defmode = DEFMODE_STE; + break; + } + fbhw = &st_switch; + atafb_ops.fb_setcolreg = &stste_setcolreg; + printk("Cannot determine video hardware; defaulting to ST(e)\n"); +#else /* ATAFB_STE */ + /* no default driver included */ + /* Nobody will ever see this message :-) */ + panic("Cannot initialize video hardware"); +#endif + } while (0); + + /* Multisync monitor capabilities */ + /* Atari-TOS defaults if no boot option present */ + if (fb_info.monspecs.hfmin == 0) { + fb_info.monspecs.hfmin = 31000; + fb_info.monspecs.hfmax = 32000; + fb_info.monspecs.vfmin = 58; + fb_info.monspecs.vfmax = 62; + } + + detected_mode = fbhw->detect(); + check_default_par(detected_mode); +#ifdef ATAFB_EXT + if (!external_addr) { +#endif /* ATAFB_EXT */ + mem_req = default_mem_req + ovsc_offset + ovsc_addlen; + mem_req = PAGE_ALIGN(mem_req) + PAGE_SIZE; + screen_base = atari_stram_alloc(mem_req, "atafb"); + if (!screen_base) + panic("Cannot allocate screen memory"); + memset(screen_base, 0, mem_req); + pad = -(unsigned long)screen_base & (PAGE_SIZE-1); + screen_base+=pad; + real_screen_base=screen_base+ovsc_offset; + screen_len = (mem_req - pad - ovsc_offset) & PAGE_MASK; + st_ovsc_switch(); + if (CPU_IS_040_OR_060) { + /* On a '040+, the cache mode of video RAM must be set to + * write-through also for internal video hardware! */ + cache_push(virt_to_phys(screen_base), screen_len); + kernel_set_cachemode(screen_base, screen_len, + IOMAP_WRITETHROUGH); + } + printk("atafb: screen_base %p real_screen_base %p screen_len %d\n", + screen_base, real_screen_base, screen_len); +#ifdef ATAFB_EXT + } + else { + /* Map the video memory (physical address given) to somewhere + * in the kernel address space. + */ + external_addr = + ioremap_writethrough((unsigned long)external_addr, + external_len); + if (external_vgaiobase) + external_vgaiobase = + (unsigned long)ioremap(external_vgaiobase, 0x10000); + screen_base = + real_screen_base = external_addr; + screen_len = external_len & PAGE_MASK; + memset (screen_base, 0, external_len); + } +#endif /* ATAFB_EXT */ + +// strcpy(fb_info.mode->name, "Atari Builtin "); + fb_info.fbops = &atafb_ops; + // try to set default (detected; requested) var + do_fb_set_var(&atafb_predefined[default_par-1], 1); + // reads hw state into current par, which may not be sane yet + ata_get_par(¤t_par); + fb_info.par = ¤t_par; + // tries to read from HW which may not be initialized yet + // so set sane var first, then call atafb_set_par + atafb_get_var(¤t_var, &fb_info); + fb_info.var = current_var; + fb_info.flags = FBINFO_FLAG_DEFAULT; + + if (!fb_find_mode(&fb_info.var, &fb_info, mode_option, atafb_modedb, + NUM_TOTAL_MODES, &atafb_modedb[defmode], + current_var.bits_per_pixel)) { + return -EINVAL; + } + +// strcat(fb_info.mode->name, fb_var_names[default_par-1][0]); + + atafb_set_disp(&fb_info); + + fb_alloc_cmap(&(fb_info.cmap), 1<<fb_info.var.bits_per_pixel, 0); + + printk("Determined %dx%d, depth %d\n", + fb_info.var.xres, fb_info.var.yres, fb_info.var.bits_per_pixel); + if ((current_var.xres != current_var.xres_virtual) || + (current_var.yres != current_var.yres_virtual)) + printk(" virtual %dx%d\n", + current_var.xres_virtual, current_var.yres_virtual); + + if (register_framebuffer(&fb_info) < 0) + return -EINVAL; + + // FIXME: mode needs setting! + //printk("fb%d: %s frame buffer device, using %dK of video memory\n", + // fb_info.node, fb_info.mode->name, screen_len>>10); + printk("fb%d: frame buffer device, using %dK of video memory\n", + fb_info.node, screen_len>>10); + + /* TODO: This driver cannot be unloaded yet */ + return 0; +} module_init(atafb_init); #ifdef MODULE --- linux-m68k-2.6.19.orig/drivers/video/atafb_iplan2p2.c +++ linux-m68k-2.6.19/drivers/video/atafb_iplan2p2.c @@ -307,14 +307,10 @@ void atafb_iplan2p2_linefill(struct fb_i const u8 *data, u32 bgcolor, u32 fgcolor) { u8 *dest; - u8 *cdat; int rows; int bytes = next_line; u16 eorx, fgx, bgx, fdx; - // source data - cdat = data; - // advance from odd to even (dx>>3) by 3: 0 1 4 5 .... // dest = (p->screen_base + yy * p->next_line + (xx>>1)*4 + (xx & 1)); dest = (u8*) info->screen_base + dy * bytes + (dx>>4)*4 + ((dx>>3)&1); @@ -324,7 +320,7 @@ void atafb_iplan2p2_linefill(struct fb_i eorx = fgx ^ bgx; for(rows = width/8; rows-- ;) { - fdx = dup2w(*cdat++); + fdx = dup2w(*data++); movepw(dest, (fdx & eorx) ^ bgx); INC_2P(dest); } --- linux-m68k-2.6.19.orig/drivers/video/atafb_iplan2p4.c +++ linux-m68k-2.6.19/drivers/video/atafb_iplan2p4.c @@ -314,14 +314,10 @@ void atafb_iplan2p4_linefill(struct fb_i const u8 *data, u32 bgcolor, u32 fgcolor) { u8 *dest; - u8 *cdat; int rows; int bytes = next_line; u32 eorx, fgx, bgx, fdx; - // source data - cdat = data; - // advance from odd to even dx by 7: 0 1 8 9 ... // dest = (p->screen_base + yy * bytes + (xx>>1)*8 + (xx & 1)); @@ -332,7 +328,7 @@ void atafb_iplan2p4_linefill(struct fb_i eorx = fgx ^ bgx; for(rows = width/8; rows-- ;) { - fdx = dup4l(*cdat++); + fdx = dup4l(*data++); movepl(dest, (fdx & eorx) ^ bgx); INC_4P(dest); } --- linux-m68k-2.6.19.orig/drivers/video/atafb_iplan2p4.h +++ linux-m68k-2.6.19/drivers/video/atafb_iplan2p4.h @@ -1,5 +1,5 @@ /* - * FBcon low-level driver for Atari interleaved bitplanes (8 planes) (iplan2p8) + * FBcon low-level driver for Atari interleaved bitplanes (4 planes) (iplan2p4) */ #ifndef _VIDEO_FBCON_IPLAN2P4_H --- linux-m68k-2.6.19.orig/drivers/video/atafb_iplan2p8.c +++ linux-m68k-2.6.19/drivers/video/atafb_iplan2p8.c @@ -349,14 +349,10 @@ void atafb_iplan2p8_linefill(struct fb_i const u8 *data, u32 bgcolor, u32 fgcolor) { u8 *dest; - u8 *cdat; int rows; int bytes = next_line; u32 eorx1, eorx2, fgx1, fgx2, bgx1, bgx2, fdx; - // source data - cdat = data; - // advance from odd to even (dx>>3) by 16 // dest = (p->screen_base + yy * bytes + (xx>>1)*16 + (xx & 1)); @@ -368,7 +364,7 @@ void atafb_iplan2p8_linefill(struct fb_i eorx1 = fgx1 ^ bgx1; eorx2 = fgx2 ^ bgx2; for(rows = width/8; rows-- ;) { - fdx = dup4l(*cdat++); + fdx = dup4l(*data++); movepl2(dest, (fdx & eorx1) ^ bgx1, (fdx & eorx2) ^ bgx2); INC_8P(dest); } --- linux-m68k-2.6.19.orig/drivers/video/atafb_mfb.c +++ linux-m68k-2.6.19/drivers/video/atafb_mfb.c @@ -80,16 +80,12 @@ void atafb_mfb_linefill(struct fb_info * int dy, int dx, u32 width, const u8 *data, u32 bgcolor, u32 fgcolor) { - u8 *dest, *cdat; - u_int rows; - u8 d; - - dest = (u8*) info->screen_base+dy*next_line+(dx>>3) + (dx & 1); - cdat = data; + u8 *dest = (u8*) info->screen_base+dy*next_line+(dx>>3) + (dx & 1); + unsigned int rows; for (rows = width/8; rows--; /* check margins */ ) { // use fast_memmove or fb_memmove - *dest++ = *cdat++; + *dest++ = *data++; } } Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [EMAIL PROTECTED] In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds - To unsubscribe from this list: send the line "unsubscribe linux-m68k" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html