diff --git a/CREDITS b/CREDITS
index ba7a71f086b47d03dd1f9b27eaec873a2fa5b0bc..2f269416def1d1cc4ea51da08566eefa5a251be3 100644
--- a/CREDITS
+++ b/CREDITS
@@ -2773,6 +2773,19 @@ S: Klosterweg 28 / i309
 S: 76131 Karlsruhe
 S: Germany
 
+N: James Simmons 
+E: jsimmons@users.sf.net 
+D: Frame buffer device maintainer
+D: input layer developement 
+D: tty/console layer
+D: various mipsel devices 
+S: 115 Carmel Avenue 
+S: El Cerrito CA 94530
+S: USA 
+
+N: Chris Vance
+E: cvance@tislabs.com
+
 N: Jaspreet Singh
 E: jaspreet@sangoma.com
 W: www.sangoma.com
diff --git a/MAINTAINERS b/MAINTAINERS
index 54a0866c7e6e4d56faa7c27614e56f57d1a641ac..a03470e081e47ebbf7f457743538dfafa52d790f 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -580,6 +580,13 @@ M:	kevin.curtis@farsite.co.uk
 W:	http://www.farsite.co.uk/
 S:	Supported
 
+FRAMEBUFFER LAYER
+P:	James Simmons, Geert Uytterhoeven	
+M:	jsimmons@users.sf.net, geert@linux-m68k.org	
+L:	linux-fbdev-devel@lists.sourceforge.net	
+W:	http://www.linux-fbdev.org
+S:	Supported
+
 FILE LOCKING (flock() and fcntl()/lockf())
 P:	Matthew Wilcox
 M:	matthew@wil.cx
diff --git a/drivers/video/Config.help b/drivers/video/Config.help
index 7a079fff6d58f25d7b3927f98e429f0c56a7be03..ee952117f6777f0786da1832ba5833c63daaf7e0 100644
--- a/drivers/video/Config.help
+++ b/drivers/video/Config.help
@@ -672,32 +672,6 @@ CONFIG_FBCON_MFB
   This is the low level frame buffer console driver for monochrome
   (2 colors) packed pixels.
 
-CONFIG_FBCON_CFB2
-  This is the low level frame buffer console driver for 2 bits per
-  pixel (4 colors) packed pixels.
-
-CONFIG_FBCON_CFB4
-  This is the low level frame buffer console driver for 4 bits per
-  pixel (16 colors) packed pixels.
-
-CONFIG_FBCON_CFB8
-  This is the low level frame buffer console driver for 8 bits per
-  pixel (256 colors) packed pixels.
-
-CONFIG_FBCON_CFB16
-  This is the low level frame buffer console driver for 15 or 16 bits
-  per pixel (32K or 64K colors, also known as `hicolor') packed
-  pixels.
-
-CONFIG_FBCON_CFB24
-  This is the low level frame buffer console driver for 24 bits per
-  pixel (16M colors, also known as `truecolor') packed pixels. It is
-  NOT for `sparse' 32 bits per pixel mode.
-
-CONFIG_FBCON_CFB32
-  This is the low level frame buffer console driver for 32 bits per
-  pixel (16M colors, also known as `truecolor') sparse packed pixels.
-
 CONFIG_FBCON_AFB
   This is the low level frame buffer console driver for 1 to 8
   bitplanes (2 to 256 colors) on Amiga.
diff --git a/drivers/video/Config.in b/drivers/video/Config.in
index 23123fe8938ac9174f21492a091b4841ef1031c8..a75f165da59919293d9b719f1b4d9dd24c746d7f 100644
--- a/drivers/video/Config.in
+++ b/drivers/video/Config.in
@@ -254,7 +254,7 @@ if [ "$CONFIG_FB" = "y" ]; then
 	 define_tristate CONFIG_FBCON_CFB2 y
 	 define_tristate CONFIG_FBCON_CFB4 y
       else
-	 if [ "$CONFIG_FB_ACORN" = "m" -o "$CONFIG_FB_SA1100" = "m"]; then 
+	 if [ "$CONFIG_FB_ACORN" = "m" -o "$CONFIG_FB_SA1100" = "m" ]; then 
 	    define_tristate CONFIG_FBCON_CFB2 m
 	    define_tristate CONFIG_FBCON_CFB4 m
 	 fi
@@ -313,20 +313,16 @@ if [ "$CONFIG_FB" = "y" ]; then
 	    define_tristate CONFIG_FBCON_CFB16 m
 	 fi
       fi
-      if [ "$CONFIG_FB_ATY" = "y" -o "$CONFIG_FB_VIRTUAL" = "y" -o \
-	   "$CONFIG_FB_CLGEN" = "y" -o "$CONFIG_FB_VESA" = "y" -o \
+      if [ "$CONFIG_FB_CYBER2000" = "y" -o "$CONFIG_FB_VOODOO1" = "y" -o \
+	   "$CONFIG_FB_CLGEN" = "y" -o "$CONFIG_FB_PVR2" = "y" -o \
 	   "$CONFIG_FB_MATROX" = "y" -o "$CONFIG_FB_PM2" = "y" -o \
-           "$CONFIG_FB_ATY128" = "y" -o "$CONFIG_FB_RADEON" = "y" -o \
-	   "$CONFIG_FB_CYBER2000" = "y" -o "$CONFIG_FB_PVR2" = "y" -o \
-	   "$CONFIG_FB_VOODOO1" = "y" -o "$CONFIG_FB_NEOMAGIC" = "y" ]; then
+           "$CONFIG_FB_ATY128" = "y" -o "$CONFIG_FB_RADEON" = "y" ]; then 
 	 define_tristate CONFIG_FBCON_CFB24 y
       else
-	 if [ "$CONFIG_FB_ATY" = "m" -o "$CONFIG_FB_VIRTUAL" = "m" -o \
-	      "$CONFIG_FB_CLGEN" = "m" -o "$CONFIG_FB_VESA" = "m" -o \
+	 if [ "$CONFIG_FB_CLGEN" = "m" -o "$CONFIG_FB_VOODOO1" = "m" -o \ 
 	      "$CONFIG_FB_MATROX" = "m" -o "$CONFIG_FB_PM2" = "m" -o \
 	      "$CONFIG_FB_ATY128" = "m" -o "$CONFIG_FB_RADEON" = "m" -o \
-	      "$CONFIG_FB_CYBER2000" = "m" -o "$CONFIG_FB_PVR2" = "m" -o \
-	      "$CONFIG_FB_VOODOO1" = "m" -o "$CONFIG_FB_NEOMAGIC" = "y" ]; then
+	      "$CONFIG_FB_CYBER2000" = "m" -o "$CONFIG_FB_PVR2" = "m" ]; then 
 	    define_tristate CONFIG_FBCON_CFB24 m
 	 fi
       fi
@@ -365,7 +361,8 @@ if [ "$CONFIG_FB" = "y" ]; then
 	 if [ "$CONFIG_FB_NEOMAGIC" = "m" -o "$CONFIG_FB_HIT" = "m" -o \
 	      "$CONFIG_FB_G364" = "m" -o "$CONFIG_FB_VIRTUAL" = "m" -o \
 	      "$CONFIG_FB_CLPS711X" = "m" -o "$CONFIG_FB_3DFX" = "m" -o \
-	      "$CONFIG_FB_RIVA" = "m" -o "$CONFIG_FB_SGIVW" = "m" ]; then 
+	      "$CONFIG_FB_RIVA" = "m" -o "$CONFIG_FB_SGIVW" = "m" -o \
+	      "$CONFIG_FB_ATY" = "m" ]; then 
 	    define_tristate CONFIG_FBCON_ACCEL m
          fi       
       fi
diff --git a/drivers/video/Makefile b/drivers/video/Makefile
index 4de70f8d4e4d7c68a34e62d99bc0cb8daf9e540d..34bd37db76bc3e1ab83e1670174775ab7049cee7 100644
--- a/drivers/video/Makefile
+++ b/drivers/video/Makefile
@@ -5,12 +5,10 @@
 # All of the (potential) objects that export symbols.
 # This list comes from 'grep -l EXPORT_SYMBOL *.[hc]'.
 
-export-objs    	:= fbmem.o fbcmap.o fbcon.o fbmon.o modedb.o \
+export-objs    	:= fbmem.o fbcmap.o fbcon.o fbmon.o modedb.o fbgen.o \
 		   fbcon-afb.o fbcon-ilbm.o fbcon-accel.o cyber2000fb.o \
-		   fbcon-iplan2p2.o fbcon-iplan2p4.o fbgen.o \
-		   fbcon-iplan2p8.o fbcon-vga-planes.o fbcon-cfb16.o \
-		   fbcon-cfb2.o fbcon-cfb24.o fbcon-cfb32.o fbcon-cfb4.o \
-		   fbcon-cfb8.o fbcon-mfb.o fbcon-hga.o
+		   fbcon-iplan2p2.o fbcon-iplan2p4.o fbcon-iplan2p8.o \
+		   fbcon-vga-planes.o fbcon-vga8-planes.o fbcon-hga.o
 
 # Each configuration option enables a list of files.
 
@@ -59,7 +57,7 @@ obj-$(CONFIG_FB_SGIVW)            += sgivwfb.o cfbfillrect.o cfbcopyarea.o cfbim
 obj-$(CONFIG_FB_3DFX)             += tdfxfb.o
 obj-$(CONFIG_FB_MAC)              += macfb.o macmodes.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o 
 obj-$(CONFIG_FB_HP300)            += hpfb.o cfbfillrect.o cfbimgblt.o
-obj-$(CONFIG_FB_OF)               += offb.o cfbfillrect.o cfbimgblit.o cfbcopyarea.o
+obj-$(CONFIG_FB_OF)               += offb.o cfbfillrect.o cfbimgblt.o cfbcopyarea.o
 obj-$(CONFIG_FB_IMSTT)            += imsttfb.o
 obj-$(CONFIG_FB_RETINAZ3)         += retz3fb.o
 obj-$(CONFIG_FB_CLGEN)            += clgenfb.o
@@ -67,7 +65,7 @@ obj-$(CONFIG_FB_TRIDENT)	  += tridentfb.o
 obj-$(CONFIG_FB_S3TRIO)           += S3triofb.o
 obj-$(CONFIG_FB_TGA)              += tgafb.o
 obj-$(CONFIG_FB_VESA)             += vesafb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o 
-obj-$(CONFIG_FB_VGA16)            += vga16fb.o fbcon-vga-planes.o
+obj-$(CONFIG_FB_VGA16)            += vga16fb.o fbcon-vga-planes.o fbcon-vga8-planes.o
 obj-$(CONFIG_FB_VIRGE)            += virgefb.o
 obj-$(CONFIG_FB_G364)             += g364fb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o
 obj-$(CONFIG_FB_FM2)              += fm2fb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o
@@ -103,12 +101,6 @@ obj-$(CONFIG_FB_VOODOO1)          += sstfb.o
 # Generic Low Level Drivers
 
 obj-$(CONFIG_FBCON_AFB)           += fbcon-afb.o
-obj-$(CONFIG_FBCON_CFB2)          += fbcon-cfb2.o
-obj-$(CONFIG_FBCON_CFB4)          += fbcon-cfb4.o
-obj-$(CONFIG_FBCON_CFB8)          += fbcon-cfb8.o
-obj-$(CONFIG_FBCON_CFB16)         += fbcon-cfb16.o
-obj-$(CONFIG_FBCON_CFB24)         += fbcon-cfb24.o
-obj-$(CONFIG_FBCON_CFB32)         += fbcon-cfb32.o
 obj-$(CONFIG_FBCON_ILBM)          += fbcon-ilbm.o
 obj-$(CONFIG_FBCON_IPLAN2P2)      += fbcon-iplan2p2.o
 obj-$(CONFIG_FBCON_IPLAN2P4)      += fbcon-iplan2p4.o
diff --git a/drivers/video/anakinfb.c b/drivers/video/anakinfb.c
index 340a90c23efe80361387c32fd7b9c3c391175ca6..3cecff3a71fe76885f79b86060925586d732cc4e 100644
--- a/drivers/video/anakinfb.c
+++ b/drivers/video/anakinfb.c
@@ -20,11 +20,8 @@
 
 #include <asm/io.h>
 
-#include <video/fbcon.h>
-
 static u32 colreg[16];
 static struct fb_info fb_info;
-static struct display display;
 
 static struct fb_var_screeninfo anakinfb_var = {
 	.xres =		400,
@@ -66,8 +63,6 @@ anakinfb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
 static struct fb_ops anakinfb_ops = {
 	.owner		= THIS_MODULE,
 	.fb_set_var	= gen_set_var,
-	.fb_get_cmap	= gen_get_cmap,
-	.fb_set_cmap	= gen_set_cmap,
 	.fb_setcolreg	= anakinfb_setcolreg,
 	.fb_fillrect	= cfb_fillrect,
 	.fb_copyarea	= cfb_copyarea,
@@ -78,19 +73,14 @@ int __init
 anakinfb_init(void)
 {
 	memset(&fb_info, 0, sizeof(struct fb_info));
-	memset(&display, 0, sizeof(struct display));
 
-	strcpy(fb_info.modename, anakinfb_fix.id);
 	fb_info.node = NODEV;
 	fb_info.currcon = -1;
 	fb_info.flags = FBINFO_FLAG_DEFAULT;
 	fb_info.fbops = &anakinfb_ops;
 	fb_info.var = anakinfb_var;
 	fb_info.fix = anakinfb_fix;
-	fb_info.disp = &display;
 	strcpy(fb_info.fontname, "VGA8x16");
-	fb_info.changevar = NULL;
-	fb_info.switch_con = gen_switch_con;
 	fb_info.updatevar = gen_update_var;
 	if (!(request_mem_region(VGA_START, VGA_SIZE, "vga")))
 		return -ENOMEM;
@@ -100,10 +90,9 @@ anakinfb_init(void)
 	}
 
 	fb_alloc_cmap(&fb_info.cmap, 16, 0);
-	gen_set_disp(-1, &fb_info);
 
 	if (register_framebuffer(&fb_info) < 0) {
-		iounmap(display.screen_base);
+		iounmap(fb_info.screen_base);
 		release_mem_region(VGA_START, VGA_SIZE);
 		return -EINVAL;
 	}
diff --git a/drivers/video/aty/atyfb_base.c b/drivers/video/aty/atyfb_base.c
index d7e50db324ec277adc1ae4474cdf8b35e54cf3c3..438fcf03cb75cc1127e2ad03cda7072fb3484f70 100644
--- a/drivers/video/aty/atyfb_base.c
+++ b/drivers/video/aty/atyfb_base.c
@@ -65,9 +65,6 @@
 #include <asm/io.h>
 #include <asm/uaccess.h>
 
-#include <video/fbcon.h>
-#include "../fbcon-accel.h"
-
 #include <video/mach64.h>
 #include "atyfb.h"
 
@@ -211,8 +208,6 @@ static struct fb_ops atyfb_ops = {
 	.fb_set_var	= gen_set_var,
 	.fb_check_var	= atyfb_check_var,
 	.fb_set_par	= atyfb_set_par,
-	.fb_get_cmap	= gen_get_cmap,
-	.fb_set_cmap	= gen_set_cmap,
 	.fb_setcolreg	= atyfb_setcolreg,
 	.fb_pan_display	= atyfb_pan_display,
 	.fb_blank	= atyfb_blank,
@@ -694,6 +689,13 @@ static int aty_crtc_to_var(const struct crtc *crtc,
 	    (v_sync_pol ? 0 : FB_SYNC_VERT_HIGH_ACT) |
 	    (c_sync ? FB_SYNC_COMP_HIGH_ACT : 0);
 
+	var->red.msb_right = 0;
+	var->green.msb_right = 0;
+	var->blue.offset = 0;
+	var->blue.msb_right = 0;
+	var->transp.offset = 0;
+	var->transp.length = 0;
+	var->transp.msb_right = 0;
 	switch (pix_width) {
 #if 0
 	case CRTC_PIX_WIDTH_4BPP:
@@ -702,10 +704,7 @@ static int aty_crtc_to_var(const struct crtc *crtc,
 		var->red.length = 8;
 		var->green.offset = 0;
 		var->green.length = 8;
-		var->blue.offset = 0;
 		var->blue.length = 8;
-		var->transp.offset = 0;
-		var->transp.length = 0;
 		break;
 #endif
 	case CRTC_PIX_WIDTH_8BPP:
@@ -714,10 +713,7 @@ static int aty_crtc_to_var(const struct crtc *crtc,
 		var->red.length = 8;
 		var->green.offset = 0;
 		var->green.length = 8;
-		var->blue.offset = 0;
 		var->blue.length = 8;
-		var->transp.offset = 0;
-		var->transp.length = 0;
 		break;
 	case CRTC_PIX_WIDTH_15BPP:	/* RGB 555 */
 		bpp = 16;
@@ -725,10 +721,7 @@ static int aty_crtc_to_var(const struct crtc *crtc,
 		var->red.length = 5;
 		var->green.offset = 5;
 		var->green.length = 5;
-		var->blue.offset = 0;
 		var->blue.length = 5;
-		var->transp.offset = 0;
-		var->transp.length = 0;
 		break;
 #if 0
 	case CRTC_PIX_WIDTH_16BPP:	/* RGB 565 */
@@ -737,10 +730,7 @@ static int aty_crtc_to_var(const struct crtc *crtc,
 		var->red.length = 5;
 		var->green.offset = 5;
 		var->green.length = 6;
-		var->blue.offset = 0;
 		var->blue.length = 5;
-		var->transp.offset = 0;
-		var->transp.length = 0;
 		break;
 #endif
 	case CRTC_PIX_WIDTH_24BPP:	/* RGB 888 */
@@ -749,10 +739,7 @@ static int aty_crtc_to_var(const struct crtc *crtc,
 		var->red.length = 8;
 		var->green.offset = 8;
 		var->green.length = 8;
-		var->blue.offset = 0;
 		var->blue.length = 8;
-		var->transp.offset = 0;
-		var->transp.length = 0;
 		break;
 	case CRTC_PIX_WIDTH_32BPP:	/* ARGB 8888 */
 		bpp = 32;
@@ -760,7 +747,6 @@ static int aty_crtc_to_var(const struct crtc *crtc,
 		var->red.length = 8;
 		var->green.offset = 8;
 		var->green.length = 8;
-		var->blue.offset = 0;
 		var->blue.length = 8;
 		var->transp.offset = 24;
 		var->transp.length = 8;
@@ -870,8 +856,7 @@ static int atyfb_set_par(struct fb_info *info)
 
 #ifdef CONFIG_BOOTX_TEXT
 	btext_update_display(info->fix.smem_start,
-			     (((par->crtc.h_tot_disp >> 16) & 0xff) +
-			      1) * 8,
+			     (((par->crtc.h_tot_disp >> 16) & 0xff) + 1) * 8,
 			     ((par->crtc.v_tot_disp >> 16) & 0x7ff) + 1,
 			     info->var.bits_per_pixel,
 			     par->crtc.vxres * info->var.bits_per_pixel / 8);
@@ -905,14 +890,13 @@ static int atyfb_encode_var(struct fb_var_screeninfo *var,
 {
 	int err;
 
-	memset(var, 0, sizeof(struct fb_var_screeninfo));
-
 	if ((err = aty_crtc_to_var(&par->crtc, var)))
 		return err;
 	var->pixclock = par->pll_ops->pll_to_var(info, &par->pll);
 
 	var->height = -1;
 	var->width = -1;
+	var->nonstd = 0;
 	return 0;
 }
 
@@ -1442,15 +1426,15 @@ static int aty_power_mgmt(int sleep, struct atyfb_par *par)
 static int aty_sleep_notify(struct pmu_sleep_notifier *self, int when)
 {
 	struct fb_info *info;
-	struct atyfb_par *par = (struct atyfb_par *) info->fb.par;
+	struct atyfb_par *par;
 	int result;
 
 	result = PBOOK_SLEEP_OK;
 
 	for (info = first_display; info != NULL; info = par->next) {
-		struct fb_fix_screeninfo fix;
 		int nb;
 
+		par = (struct atyfb_par *) info->par;
 		nb = fb_display[fg_console].var.yres * info->fix.line_length;
 
 		switch (when) {
@@ -1469,7 +1453,7 @@ static int aty_sleep_notify(struct pmu_sleep_notifier *self, int when)
 			if (par->blitter_may_be_busy)
 				wait_for_idle(par);
 			/* Stop accel engine (stop bus mastering) */
-			if (par->accel_flags & FB_ACCELF_TEXT)
+			if (info->var.accel_flags & FB_ACCELF_TEXT)
 				aty_reset_engine(par);
 
 			/* Backup fb content */
@@ -1562,7 +1546,6 @@ static int __init aty_init(struct fb_info *info, const char *name)
 	const char *chipname = NULL, *ramname = NULL, *xtal;
 	int j, pll, mclk, gtb_memsize;
 	struct fb_var_screeninfo var;
-	struct display *disp;
 	u32 chip_id, i;
 	u16 type;
 	u8 rev;
@@ -1843,17 +1826,11 @@ static int __init aty_init(struct fb_info *info, const char *name)
 	fb_memset((void *) info->screen_base, 0,
 		  info->fix.smem_len);
 
-	disp = info->disp;
-
-	strcpy(info->modename, info->fix.id);
 	info->node = NODEV;
 	info->fbops = &atyfb_ops;
-	info->disp = disp;
 	info->pseudo_palette = pseudo_palette;
 	info->currcon = -1;
 	strcpy(info->fontname, fontname);
-	info->changevar = NULL;
-	info->switch_con = gen_switch;
 	info->updatevar = gen_update_var;
 	info->flags = FBINFO_FLAG_DEFAULT;
 
@@ -1979,6 +1956,7 @@ static int __init aty_init(struct fb_info *info, const char *name)
 
 	fb_alloc_cmap(&info->cmap, 256, 0);
 
+	var.activate = FB_ACTIVATE_NOW;
 	gen_set_var(&var, -1, info);
 
 	if (register_framebuffer(info) < 0)
@@ -2029,27 +2007,17 @@ int __init atyfb_init(void)
 
 			info =
 			    kmalloc(sizeof(struct fb_info) +
-				    sizeof(struct display), GFP_ATOMIC);
+				    sizeof(struct atyfb_par), GFP_ATOMIC);
 			if (!info) {
 				printk
 				    ("atyfb_init: can't alloc fb_info\n");
 				return -ENXIO;
 			}
-			memset(info, 0,
-			       sizeof(struct fb_info) +
-			       sizeof(struct display));
+			memset(info, 0, sizeof(struct fb_info) + 
+				sizeof(struct atyfb_par));
 
-			default_par =
-			    kmalloc(sizeof(struct atyfb_par), GFP_ATOMIC);
-			if (!default_par) {
-				printk
-				    ("atyfb_init: can't alloc atyfb_par\n");
-				kfree(info);
-				return -ENXIO;
-			}
-			memset(default_par, 0, sizeof(struct atyfb_par));
+			default_par = (struct atyfb_par *) (info + 1);
 
-			info->disp = (struct display *) (info + 1);
 			info->fix = atyfb_fix;
 			info->par = default_par;
 
@@ -2383,7 +2351,6 @@ int __init atyfb_init(void)
 			if (first_display == NULL)
 				pmu_register_sleep_notifier
 				    (&aty_sleep_notifier);
-			/* FIXME info->next = first_display; */
 			default_par->next = first_display;
 #endif
 		}
@@ -2410,7 +2377,7 @@ int __init atyfb_init(void)
 			return -ENOMEM;
 		}
 		memset(info, 0, sizeof(struct fb_info));
-		info->fix = atyfb_fix;		
+		info->fix = atyfb_fix;
 
 		/*
 		 *  Map the video memory (physical address given) to somewhere in the
@@ -2421,7 +2388,7 @@ int __init atyfb_init(void)
 		info->fix.smem_start = info->screen_base;	/* Fake! */
 		default_par->ati_regbase = (unsigned long)ioremap(phys_guiregbase[m64_num],
 							  0x10000) + 0xFC00ul;
-		info->fix.mmio_start = par->ati_regbase; /* Fake! */
+		info->fix.mmio_start = default_par->ati_regbase; /* Fake! */
 
 		aty_st_le32(CLOCK_CNTL, 0x12345678, default_par);
 		clock_r = aty_ld_le32(CLOCK_CNTL, default_par);
diff --git a/drivers/video/cfbcopyarea.c b/drivers/video/cfbcopyarea.c
index a57643eb7b32f1320d0a26dff46006f69b4e54cb..07b47422410b5d28fd861c5d29caa86cd3bf9908 100644
--- a/drivers/video/cfbcopyarea.c
+++ b/drivers/video/cfbcopyarea.c
@@ -40,10 +40,10 @@ void cfb_copyarea(struct fb_info *p, struct fb_copyarea *area)
 {
 	int x2, y2, lineincr, shift, shift_right, shift_left, old_dx, old_dy;
 	int j, linesize = p->fix.line_length, bpl = sizeof(unsigned long);
-	unsigned long start_index, end_index, start_mask, end_mask, last;
+	unsigned long start_index, end_index, start_mask, end_mask, last, tmp;
 	unsigned long *dst = NULL, *src = NULL;
 	char *src1, *dst1;
-	int tmp, height;
+	int height;
 
 	/* clip the destination */
 	old_dx = area->dx;
diff --git a/drivers/video/cfbfillrect.c b/drivers/video/cfbfillrect.c
index d052a89bd5eb092a0eabdfc7da51aaf3d93a9d11..b3ad462b7a273ae494b85bcc487f0c775622a5b5 100644
--- a/drivers/video/cfbfillrect.c
+++ b/drivers/video/cfbfillrect.c
@@ -20,7 +20,6 @@
 #include <linux/string.h>
 #include <linux/fb.h>
 #include <asm/types.h>
-#include <video/fbcon.h>
 
 #if BITS_PER_LONG == 32
 #define FB_READ		fb_readl
diff --git a/drivers/video/cfbimgblt.c b/drivers/video/cfbimgblt.c
index e3f138ad21b36db90de901fcc9246e29f67199ed..f522f900d66f76f8f1d15cf038e6ffb05173e69c 100644
--- a/drivers/video/cfbimgblt.c
+++ b/drivers/video/cfbimgblt.c
@@ -31,8 +31,6 @@
 #include <linux/fb.h>
 #include <asm/types.h>
 
-#include <video/fbcon.h>
-
 #define DEBUG
 
 #ifdef DEBUG
diff --git a/drivers/video/clps711xfb.c b/drivers/video/clps711xfb.c
index d00c96dccb1ea5cc6722fd61e7802d200e52cec6..dc37152182f1dc02d65d731b5f396efc0fd25155 100644
--- a/drivers/video/clps711xfb.c
+++ b/drivers/video/clps711xfb.c
@@ -26,8 +26,6 @@
 #include <linux/init.h>
 #include <linux/proc_fs.h>
 
-#include <video/fbcon.h>
-
 #include <asm/hardware.h>
 #include <asm/mach-types.h>
 #include <asm/uaccess.h>
@@ -197,8 +195,6 @@ static struct fb_ops clps7111fb_ops = {
 	.fb_check_var	= clps7111fb_check_var,
 	.fb_set_par	= clps7111fb_set_par,
 	.fb_set_var	= gen_set_var,
-	.fb_set_cmap	= gen_set_cmap,
-	.fb_get_cmap	= gen_get_cmap,
 	.fb_setcolreg	= clps7111fb_setcolreg,
 	.fb_blank	= clps7111fb_blank,
 	.fb_fillrect	= cfb_fillrect,
@@ -261,11 +257,11 @@ int __init clps711xfb_init(void)
 {
 	int err = -ENOMEM;
 
-	cfb = kmalloc(sizeof(*cfb) + sizeof(struct display), GFP_KERNEL);
+	cfb = kmalloc(sizeof(*cfb), GFP_KERNEL);
 	if (!cfb)
 		goto out;
 
-	memset(cfb, 0, sizeof(*cfb) + sizeof(struct display));
+	memset(cfb, 0, sizeof(*cfb));
 	memset((void *)PAGE_OFFSET, 0, 0x14000);
 
 	cfb->currcon		= -1;
@@ -276,22 +272,19 @@ int __init clps711xfb_init(void)
 	cfb->fix.smem_len	= 0x14000;
 	cfb->fix.type	= FB_TYPE_PACKED_PIXELS;
 
-	cfb->var.xres	 = 640;
-	cfb->var.xres_virtual = 640;
-	cfb->var.yres	 = 240;
-	cfb->var.yres_virtual = 240;
+	cfb->var.xres 		= 640;
+	cfb->var.xres_virtual 	= 640;
+	cfb->var.yres 		= 240;
+	cfb->var.yres_virtual 	= 240;
 	cfb->var.bits_per_pixel = 4;
-	cfb->var.grayscale   = 1;
+	cfb->var.grayscale   	= 1;
 	cfb->var.activate	= FB_ACTIVATE_NOW;
-	cfb->var.height	= -1;
-	cfb->var.width	= -1;
+	cfb->var.height		= -1;
+	cfb->var.width		= -1;
 
 	cfb->fbops		= &clps7111fb_ops;
-	cfb->changevar	= NULL;
-	cfb->switch_con	= gen_switch;
-	cfb->updatevar	= gen_update_var;
+	cfb->updatevar		= gen_update_var;
 	cfb->flags		= FBINFO_FLAG_DEFAULT;
-	cfb->disp		= (struct display *)(cfb + 1);
 
 	fb_alloc_cmap(&cfb->cmap, CMAP_SIZE, 0);
 
diff --git a/drivers/video/cyber2000fb.c b/drivers/video/cyber2000fb.c
index a090625f04834d2828ef235bd3e19c31c50049d6..6cfd3261244e5dddcc7057b170fe48b632b3ff0c 100644
--- a/drivers/video/cyber2000fb.c
+++ b/drivers/video/cyber2000fb.c
@@ -1114,8 +1114,6 @@ static struct fb_ops cyber2000fb_ops = {
 	.fb_setcolreg	= cyber2000fb_setcolreg,
 	.fb_pan_display	= cyber2000fb_pan_display,
 	.fb_blank	= cyber2000fb_blank,
-	.fb_get_cmap	= gen_get_cmap,
-	.fb_set_cmap	= gen_set_cmap,
 };
 
 /*
diff --git a/drivers/video/dnfb.c b/drivers/video/dnfb.c
index bf299d99ea671af76b45c7167a8ee0dee8cd5dbe..1241ee972111a97d8bc505d5c3b157786111391d 100644
--- a/drivers/video/dnfb.c
+++ b/drivers/video/dnfb.c
@@ -15,8 +15,6 @@
 #include <linux/fb.h>
 #include <linux/module.h>
 
-#include <video/fbcon.h>
-
 /* apollo video HW definitions */
 
 /*
@@ -111,7 +109,6 @@
 #endif
 
 static struct fb_info fb_info;
-static struct display disp;
 
 /* frame buffer operations */
 
@@ -121,8 +118,6 @@ static void dnfb_copyarea(struct fb_info *info, struct fb_copyarea *area);
 static struct fb_ops dn_fb_ops = {
 	.owner		= THIS_MODULE,
 	.fb_set_var	= gen_set_var,
-	.fb_get_cmap	= gen_get_cmap,
-	.fb_set_cmap	= gen_set_cmap,
 	.fb_blank	= dnfb_blank,
 	.fb_fillrect	= cfb_fillrect,
 	.fb_copyarea	= dnfb_copyarea,
@@ -239,22 +234,16 @@ unsigned long __init dnfb_init(unsigned long mem_start)
 {
 	int err;
 
-	strcpy(fb_info.modename, dnfb_fix.id);
-	fb_info.changevar = NULL;
 	fb_info.fontname[0] = 0;
-	fb_info.disp = &disp;
-	fb_info.switch_con = gen_switch;
 	fb_info.updatevar = gen_update_var;
 	fb_info.node = NODEV;
 	fb_info.fbops = &dn_fb_ops;
 	fb_info.currcon = -1;
 	fb_info.fix = dnfb_fix;
 	fb_info.var = dnfb_var;
+	fb_info.screen_base = (u_char *) fb_info.fix.smem_start;
 
 	fb_alloc_cmap(&fb_info.cmap, 2, 0);
-	gen_set_disp(-1, &fb_info);
-
-	fb_info.screen_base = (u_char *) fb_info.fix.smem_start;
 
 	err = register_framebuffer(&fb_info);
 	if (err < 0)
diff --git a/drivers/video/fbcon-accel.c b/drivers/video/fbcon-accel.c
index 27119e32c5dcc8f4195836ce56f7405b8c6477ec..8f6c5dfe0066fc4d380a4566289658a007e7543a 100644
--- a/drivers/video/fbcon-accel.c
+++ b/drivers/video/fbcon-accel.c
@@ -82,9 +82,10 @@ void fbcon_accel_putcs(struct vc_data *vc, struct display *p,
 	unsigned short charmask = p->charmask;
 	unsigned int width = ((fontwidth(p)+7)>>3);
 	struct fb_image image;
+	u16 c = scr_readw(s);
 
-	image.fg_color = attr_fgcol(p, *s);
-	image.bg_color = attr_bgcol(p, *s);
+	image.fg_color = attr_fgcol(p, c);
+	image.bg_color = attr_bgcol(p, c);
 	image.dx = xx * fontwidth(p);
 	image.dy = yy * fontheight(p);
 	image.width = fontwidth(p);
diff --git a/drivers/video/fbcon-cfb16.c b/drivers/video/fbcon-cfb16.c
deleted file mode 100644
index 254e559fb5910e2090fd00bcd61fca85bd1c86d6..0000000000000000000000000000000000000000
--- a/drivers/video/fbcon-cfb16.c
+++ /dev/null
@@ -1,319 +0,0 @@
-/*
- *  linux/drivers/video/cfb16.c -- Low level frame buffer operations for 16 bpp
- *				   truecolor packed pixels
- *
- *	Created 5 Apr 1997 by Geert Uytterhoeven
- *
- *  This file is subject to the terms and conditions of the GNU General Public
- *  License.  See the file COPYING in the main directory of this archive for
- *  more details.
- */
-
-#include <linux/module.h>
-#include <linux/tty.h>
-#include <linux/console.h>
-#include <linux/string.h>
-#include <linux/fb.h>
-#include <asm/io.h>
-
-#include <video/fbcon.h>
-#include <video/fbcon-cfb16.h>
-
-
-    /*
-     *  16 bpp packed pixels
-     */
-
-static u32 tab_cfb16[] = {
-#if defined(__BIG_ENDIAN)
-    0x00000000, 0x0000ffff, 0xffff0000, 0xffffffff
-#elif defined(__LITTLE_ENDIAN)
-    0x00000000, 0xffff0000, 0x0000ffff, 0xffffffff
-#else
-#error FIXME: No endianness??
-#endif
-};
-
-void fbcon_cfb16_setup(struct display *p)
-{
-    p->next_line = p->fb_info->fix.line_length ? p->fb_info->fix.line_length : p->var.xres_virtual<<1;
-    p->next_plane = 0;
-}
-
-void fbcon_cfb16_bmove(struct display *p, int sy, int sx, int dy, int dx,
-		       int height, int width)
-{
-    int bytes = p->next_line, linesize = bytes * fontheight(p), rows;
-    u8 *src, *dst;
-
-    if (sx == 0 && dx == 0 && width * fontwidth(p) * 2 == bytes) {
-	fb_memmove(p->fb_info->screen_base + dy * linesize,
-		  p->fb_info->screen_base + sy * linesize,
-		  height * linesize);
-	return;
-    }
-    if (fontwidthlog(p)) {
-	sx <<= fontwidthlog(p)+1;
-	dx <<= fontwidthlog(p)+1;
-	width <<= fontwidthlog(p)+1;
-    } else {
-	sx *= fontwidth(p)*2;
-	dx *= fontwidth(p)*2;
-	width *= fontwidth(p)*2;
-    }
-    if (dy < sy || (dy == sy && dx < sx)) {
-	src = p->fb_info->screen_base + sy * linesize + sx;
-	dst = p->fb_info->screen_base + dy * linesize + dx;
-	for (rows = height * fontheight(p); rows--;) {
-	    fb_memmove(dst, src, width);
-	    src += bytes;
-	    dst += bytes;
-	}
-    } else {
-	src = p->fb_info->screen_base + (sy+height) * linesize + sx - bytes;
-	dst = p->fb_info->screen_base + (dy+height) * linesize + dx - bytes;
-	for (rows = height * fontheight(p); rows--;) {
-	    fb_memmove(dst, src, width);
-	    src -= bytes;
-	    dst -= bytes;
-	}
-    }
-}
-
-static inline void rectfill(u8 *dest, int width, int height, u32 data,
-			    int linesize)
-{
-    int i;
-
-    data |= data<<16;
-
-    while (height-- > 0) {
-	u32 *p = (u32 *)dest;
-	for (i = 0; i < width/4; i++) {
-	    fb_writel(data, p++);
-	    fb_writel(data, p++);
-	}
-	if (width & 2)
-	    fb_writel(data, p++);
-	if (width & 1)
-	    fb_writew(data, (u16*)p);
-	dest += linesize;
-    }
-}
-
-void fbcon_cfb16_clear(struct vc_data *conp, struct display *p, int sy, int sx,
-		       int height, int width)
-{
-    u8 *dest;
-    int bytes = p->next_line, lines = height * fontheight(p);
-    u32 bgx;
-
-    dest = p->fb_info->screen_base + sy * fontheight(p) * bytes + sx * fontwidth(p) * 2;
-
-    bgx = ((u16 *)p->dispsw_data)[attr_bgcol_ec(p, conp)];
-
-    width *= fontwidth(p)/4;
-    if (width * 8 == bytes)
-	rectfill(dest, lines * width * 4, 1, bgx, bytes);
-    else
-	rectfill(dest, width * 4, lines, bgx, bytes);
-}
-
-void fbcon_cfb16_putc(struct vc_data *conp, struct display *p, int c, int yy,
-		      int xx)
-{
-    u8 *dest, *cdat, bits;
-    int bytes = p->next_line, rows;
-    u32 eorx, fgx, bgx;
-
-    dest = p->fb_info->screen_base + yy * fontheight(p) * bytes + xx * fontwidth(p) * 2;
-
-    fgx = ((u16 *)p->dispsw_data)[attr_fgcol(p, c)];
-    bgx = ((u16 *)p->dispsw_data)[attr_bgcol(p, c)];
-    fgx |= (fgx << 16);
-    bgx |= (bgx << 16);
-    eorx = fgx ^ bgx;
-
-    switch (fontwidth(p)) {
-    case 4:
-    case 8:
-	cdat = p->fontdata + (c & p->charmask) * fontheight(p);
-	for (rows = fontheight(p); rows--; dest += bytes) {
-	    bits = *cdat++;
-	    fb_writel((tab_cfb16[bits >> 6] & eorx) ^ bgx, dest);
-	    fb_writel((tab_cfb16[bits >> 4 & 3] & eorx) ^ bgx, dest+4);
-	    if (fontwidth(p) == 8) {
-		fb_writel((tab_cfb16[bits >> 2 & 3] & eorx) ^ bgx, dest+8);
-		fb_writel((tab_cfb16[bits & 3] & eorx) ^ bgx, dest+12);
-	    }
-	}
-	break;
-    case 12:
-    case 16:
-	cdat = p->fontdata + ((c & p->charmask) * fontheight(p) << 1);
-	for (rows = fontheight(p); rows--; dest += bytes) {
-	    bits = *cdat++;
-	    fb_writel((tab_cfb16[bits >> 6] & eorx) ^ bgx, dest);
-	    fb_writel((tab_cfb16[bits >> 4 & 3] & eorx) ^ bgx, dest+4);
-	    fb_writel((tab_cfb16[bits >> 2 & 3] & eorx) ^ bgx, dest+8);
-	    fb_writel((tab_cfb16[bits & 3] & eorx) ^ bgx, dest+12);
-	    bits = *cdat++;
-	    fb_writel((tab_cfb16[bits >> 6] & eorx) ^ bgx, dest+16);
-	    fb_writel((tab_cfb16[bits >> 4 & 3] & eorx) ^ bgx, dest+20);
-	    if (fontwidth(p) == 16) {
-		fb_writel((tab_cfb16[bits >> 2 & 3] & eorx) ^ bgx, dest+24);
-		fb_writel((tab_cfb16[bits & 3] & eorx) ^ bgx, dest+28);
-	    }
-	}
-	break;
-    }
-}
-
-void fbcon_cfb16_putcs(struct vc_data *conp, struct display *p,
-		       const unsigned short *s, int count, int yy, int xx)
-{
-    u8 *cdat, *dest, *dest0;
-    u16 c;
-    int rows, bytes = p->next_line;
-    u32 eorx, fgx, bgx;
-
-    dest0 = p->fb_info->screen_base + yy * fontheight(p) * bytes + xx * fontwidth(p) * 2;
-    c = scr_readw(s);
-    fgx = ((u16 *)p->dispsw_data)[attr_fgcol(p, c)];
-    bgx = ((u16 *)p->dispsw_data)[attr_bgcol(p, c)];
-    fgx |= (fgx << 16);
-    bgx |= (bgx << 16);
-    eorx = fgx ^ bgx;
-
-    switch (fontwidth(p)) {
-    case 4:
-    case 8:
-	while (count--) {
-	    c = scr_readw(s++) & p->charmask;
-	    cdat = p->fontdata + c * fontheight(p);
-	    for (rows = fontheight(p), dest = dest0; rows--; dest += bytes) {
-		u8 bits = *cdat++;
-	        fb_writel((tab_cfb16[bits >> 6] & eorx) ^ bgx, dest);
-	        fb_writel((tab_cfb16[bits >> 4 & 3] & eorx) ^ bgx, dest+4);
-		if (fontwidth(p) == 8) {
-		    fb_writel((tab_cfb16[bits >> 2 & 3] & eorx) ^ bgx, dest+8);
-		    fb_writel((tab_cfb16[bits & 3] & eorx) ^ bgx, dest+12);
-		}
-	    }
-	    dest0 += fontwidth(p)*2;;
-	}
-	break;
-    case 12:
-    case 16:
-	while (count--) {
-	    c = scr_readw(s++) & p->charmask;
-	    cdat = p->fontdata + (c * fontheight(p) << 1);
-	    for (rows = fontheight(p), dest = dest0; rows--; dest += bytes) {
-		u8 bits = *cdat++;
-	        fb_writel((tab_cfb16[bits >> 6] & eorx) ^ bgx, dest);
-	        fb_writel((tab_cfb16[bits >> 4 & 3] & eorx) ^ bgx, dest+4);
-	        fb_writel((tab_cfb16[bits >> 2 & 3] & eorx) ^ bgx, dest+8);
-	        fb_writel((tab_cfb16[bits & 3] & eorx) ^ bgx, dest+12);
-		bits = *cdat++;
-	        fb_writel((tab_cfb16[bits >> 6] & eorx) ^ bgx, dest+16);
-	        fb_writel((tab_cfb16[bits >> 4 & 3] & eorx) ^ bgx, dest+20);
-		if (fontwidth(p) == 16) {
-		    fb_writel((tab_cfb16[bits >> 2 & 3] & eorx) ^ bgx, dest+24);
-		    fb_writel((tab_cfb16[bits & 3] & eorx) ^ bgx, dest+28);
-		}
-	    }
-	    dest0 += fontwidth(p)*2;
-	}
-	break;
-    }
-}
-
-void fbcon_cfb16_revc(struct display *p, int xx, int yy)
-{
-    u8 *dest;
-    int bytes = p->next_line, rows;
-
-    dest = p->fb_info->screen_base + yy * fontheight(p) * bytes + xx * fontwidth(p)*2;
-    for (rows = fontheight(p); rows--; dest += bytes) {
-	switch (fontwidth(p)) {
-	case 16:
-	    fb_writel(fb_readl(dest+24) ^ 0xffffffff, dest+24);
-	    fb_writel(fb_readl(dest+28) ^ 0xffffffff, dest+28);
-	    /* FALL THROUGH */
-	case 12:
-	    fb_writel(fb_readl(dest+16) ^ 0xffffffff, dest+16);
-	    fb_writel(fb_readl(dest+20) ^ 0xffffffff, dest+20);
-	    /* FALL THROUGH */
-	case 8:
-	    fb_writel(fb_readl(dest+8) ^ 0xffffffff, dest+8);
-	    fb_writel(fb_readl(dest+12) ^ 0xffffffff, dest+12);
-	    /* FALL THROUGH */
-	case 4:
-	    fb_writel(fb_readl(dest+0) ^ 0xffffffff, dest+0);
-	    fb_writel(fb_readl(dest+4) ^ 0xffffffff, dest+4);
-	}
-    }
-}
-
-void fbcon_cfb16_clear_margins(struct vc_data *conp, struct display *p,
-			       int bottom_only)
-{
-    int bytes = p->next_line;
-    u32 bgx;
-
-    unsigned int right_start = conp->vc_cols*fontwidth(p);
-    unsigned int bottom_start = conp->vc_rows*fontheight(p);
-    unsigned int right_width, bottom_width;
-
-    bgx = ((u16 *)p->dispsw_data)[attr_bgcol_ec(p, conp)];
-
-    if (!bottom_only && (right_width = p->var.xres-right_start))
-	rectfill(p->fb_info->screen_base+right_start*2, right_width,
-		 p->var.yres_virtual, bgx, bytes);
-    if ((bottom_width = p->var.yres-bottom_start))
-	rectfill(p->fb_info->screen_base+(p->var.yoffset+bottom_start)*bytes,
-		 right_start, bottom_width, bgx, bytes);
-}
-
-
-    /*
-     *  `switch' for the low level operations
-     */
-
-struct display_switch fbcon_cfb16 = {
-    setup:		fbcon_cfb16_setup,
-    bmove:		fbcon_cfb16_bmove,
-    clear:		fbcon_cfb16_clear,
-    putc:		fbcon_cfb16_putc,
-    putcs:		fbcon_cfb16_putcs,
-    revc:		fbcon_cfb16_revc,
-    clear_margins:	fbcon_cfb16_clear_margins,
-    fontwidthmask:	FONTWIDTH(4)|FONTWIDTH(8)|FONTWIDTH(12)|FONTWIDTH(16)
-};
-
-
-#ifdef MODULE
-MODULE_LICENSE("GPL");
-
-int init_module(void)
-{
-    return 0;
-}
-
-void cleanup_module(void)
-{}
-#endif /* MODULE */
-
-
-    /*
-     *  Visible symbols for modules
-     */
-
-EXPORT_SYMBOL(fbcon_cfb16);
-EXPORT_SYMBOL(fbcon_cfb16_setup);
-EXPORT_SYMBOL(fbcon_cfb16_bmove);
-EXPORT_SYMBOL(fbcon_cfb16_clear);
-EXPORT_SYMBOL(fbcon_cfb16_putc);
-EXPORT_SYMBOL(fbcon_cfb16_putcs);
-EXPORT_SYMBOL(fbcon_cfb16_revc);
-EXPORT_SYMBOL(fbcon_cfb16_clear_margins);
diff --git a/drivers/video/fbcon-cfb2.c b/drivers/video/fbcon-cfb2.c
deleted file mode 100644
index e4896a6ce9e3bf66f34962f9b9fae953c299d7eb..0000000000000000000000000000000000000000
--- a/drivers/video/fbcon-cfb2.c
+++ /dev/null
@@ -1,225 +0,0 @@
-/*
- *  linux/drivers/video/cfb2.c -- Low level frame buffer operations for 2 bpp
- *				  packed pixels
- *
- *	Created 26 Dec 1997 by Michael Schmitz
- *	Based on cfb4.c
- *
- *  This file is subject to the terms and conditions of the GNU General Public
- *  License.  See the file COPYING in the main directory of this archive for
- *  more details.
- */
-
-#include <linux/module.h>
-#include <linux/tty.h>
-#include <linux/console.h>
-#include <linux/string.h>
-#include <linux/fb.h>
-
-#include <video/fbcon.h>
-#include <video/fbcon-cfb2.h>
-
-
-    /*
-     *  2 bpp packed pixels
-     */
-
-    /*
-     *  IFF the font is even pixel aligned (that is to say each
-     *  character start is a byte start in the pixel pairs). That
-     *  avoids us having to mask bytes and means we won't be here
-     *  all week. On a MacII that matters _lots_
-     */
-
-static u_char nibbletab_cfb2[]={
-#if defined(__BIG_ENDIAN)
-	0x00,0x03,0x0c,0x0f,
-	0x30,0x33,0x3c,0x3f,
-	0xc0,0xc3,0xcc,0xcf,
-	0xf0,0xf3,0xfc,0xff
-#elif defined(__LITTLE_ENDIAN)
-	0x00,0xc0,0x30,0xf0,
-	0x0c,0xcc,0x3c,0xfc,
-	0x03,0xc3,0x33,0xf3,
-	0x0f,0xcf,0x3f,0xff
-#else
-#error FIXME: No endianness??
-#endif
-};
- 
-
-void fbcon_cfb2_setup(struct display *p)
-{
-    p->next_line = p->fb_info->fix.line_length ? p->fb_info->fix.line_length : p->var.xres_virtual>>2;
-    p->next_plane = 0;
-}
-
-void fbcon_cfb2_bmove(struct display *p, int sy, int sx, int dy, int dx,
-		      int height, int width)
-{
-	int bytes = p->next_line, linesize = bytes * fontheight(p), rows;
-	u8 *src,*dst;
-
-	if (sx == 0 && dx == 0 && width * 2 == bytes) {
-		fb_memmove(p->fb_info->screen_base + dy * linesize,
-			  p->fb_info->screen_base + sy * linesize,
-			  height * linesize);
-	}
-	else {
-		if (dy < sy || (dy == sy && dx < sx)) {
-			src = p->fb_info->screen_base + sy * linesize + sx * 2;
-			dst = p->fb_info->screen_base + dy * linesize + dx * 2;
-			for (rows = height * fontheight(p) ; rows-- ;) {
-				fb_memmove(dst, src, width * 2);
-				src += bytes;
-				dst += bytes;
-			}
-		}
-		else {
-			src = p->fb_info->screen_base + (sy+height) * linesize + sx * 2 - bytes;
-			dst = p->fb_info->screen_base + (dy+height) * linesize + dx * 2 - bytes;
-			for (rows = height * fontheight(p) ; rows-- ;) {
-				fb_memmove(dst, src, width * 2);
-				src -= bytes;
-				dst -= bytes;
-			}
-		}
-	}
-}
-
-void fbcon_cfb2_clear(struct vc_data *conp, struct display *p, int sy, int sx,
-		      int height, int width)
-{
-	u8 *dest0,*dest;
-	int bytes=p->next_line,lines=height * fontheight(p), rows, i;
-	u32 bgx;
-
-	dest = p->fb_info->screen_base + sy * fontheight(p) * bytes + sx * 2;
-
-	bgx=attr_bgcol_ec(p,conp);
-	bgx |= (bgx << 2);	/* expand the colour to 16 bits */
-	bgx |= (bgx << 4);
-	bgx |= (bgx << 8);
-
-	if (sx == 0 && width * 2 == bytes) {
-		for (i = 0 ; i < lines * width ; i++) {
-			fb_writew (bgx, dest);
-			dest+=2;
-		}
-	} else {
-		dest0=dest;
-		for (rows = lines; rows-- ; dest0 += bytes) {
-			dest=dest0;
-			for (i = 0 ; i < width ; i++) {
-				/* memset ?? */
-				fb_writew (bgx, dest);
-				dest+=2;
-			}
-		}
-	}
-}
-
-void fbcon_cfb2_putc(struct vc_data *conp, struct display *p, int c, int yy,
-		     int xx)
-{
-	u8 *dest,*cdat;
-	int bytes=p->next_line,rows;
-	u32 eorx,fgx,bgx;
-
-	dest = p->fb_info->screen_base + yy * fontheight(p) * bytes + xx * 2;
-	cdat = p->fontdata + (c & p->charmask) * fontheight(p);
-
-	fgx=3;/*attr_fgcol(p,c);*/
-	bgx=attr_bgcol(p,c);
-	fgx |= (fgx << 2);	/* expand color to 8 bits */
-	fgx |= (fgx << 4);
-	bgx |= (bgx << 2);
-	bgx |= (bgx << 4);
-	eorx = fgx ^ bgx;
-
-	for (rows = fontheight(p) ; rows-- ; dest += bytes) {
-		fb_writeb((nibbletab_cfb2[*cdat >> 4] & eorx) ^ bgx, dest+0);
-		fb_writeb((nibbletab_cfb2[*cdat++ & 0xf] & eorx) ^ bgx, dest+1);
-	}
-}
-
-void fbcon_cfb2_putcs(struct vc_data *conp, struct display *p, const unsigned short *s,
-		      int count, int yy, int xx)
-{
-	u8 *cdat, *dest, *dest0;
-	u16 c;
-	int rows,bytes=p->next_line;
-	u32 eorx, fgx, bgx;
-
-	dest0 = p->fb_info->screen_base + yy * fontheight(p) * bytes + xx * 2;
-	c = scr_readw(s);
-	fgx = 3/*attr_fgcol(p, c)*/;
-	bgx = attr_bgcol(p, c);
-	fgx |= (fgx << 2);
-	fgx |= (fgx << 4);
-	bgx |= (bgx << 2);
-	bgx |= (bgx << 4);
-	eorx = fgx ^ bgx;
-	while (count--) {
-		c = scr_readw(s++) & p->charmask;
-		cdat = p->fontdata + c * fontheight(p);
-
-		for (rows = fontheight(p), dest = dest0; rows-- ; dest += bytes) {
-			fb_writeb((nibbletab_cfb2[*cdat >> 4] & eorx) ^ bgx, dest+0);
-			fb_writeb((nibbletab_cfb2[*cdat++ & 0xf] & eorx) ^ bgx, dest+1);
-		}
-		dest0+=2;
-	}
-}
-
-void fbcon_cfb2_revc(struct display *p, int xx, int yy)
-{
-	u8 *dest;
-	int bytes=p->next_line, rows;
-
-	dest = p->fb_info->screen_base + yy * fontheight(p) * bytes + xx * 2;
-	for (rows = fontheight(p) ; rows-- ; dest += bytes) {
-		fb_writew(fb_readw(dest) ^ 0xffff, dest);
-	}
-}
-
-
-    /*
-     *  `switch' for the low level operations
-     */
-
-struct display_switch fbcon_cfb2 = {
-    setup:		fbcon_cfb2_setup,
-    bmove:		fbcon_cfb2_bmove,
-    clear:		fbcon_cfb2_clear,
-    putc:		fbcon_cfb2_putc,
-    putcs:		fbcon_cfb2_putcs,
-    revc:		fbcon_cfb2_revc,
-    fontwidthmask:	FONTWIDTH(8)
-};
-
-
-#ifdef MODULE
-MODULE_LICENSE("GPL");
-
-int init_module(void)
-{
-    return 0;
-}
-
-void cleanup_module(void)
-{}
-#endif /* MODULE */
-
-
-    /*
-     *  Visible symbols for modules
-     */
-
-EXPORT_SYMBOL(fbcon_cfb2);
-EXPORT_SYMBOL(fbcon_cfb2_setup);
-EXPORT_SYMBOL(fbcon_cfb2_bmove);
-EXPORT_SYMBOL(fbcon_cfb2_clear);
-EXPORT_SYMBOL(fbcon_cfb2_putc);
-EXPORT_SYMBOL(fbcon_cfb2_putcs);
-EXPORT_SYMBOL(fbcon_cfb2_revc);
diff --git a/drivers/video/fbcon-cfb24.c b/drivers/video/fbcon-cfb24.c
deleted file mode 100644
index 878bac753eb535a75d36d32ed2117aa31b168229..0000000000000000000000000000000000000000
--- a/drivers/video/fbcon-cfb24.c
+++ /dev/null
@@ -1,333 +0,0 @@
-/*
- *  linux/drivers/video/cfb24.c -- Low level frame buffer operations for 24 bpp
- *				   truecolor packed pixels
- *
- *	Created 7 Mar 1998 by Geert Uytterhoeven
- *
- *  This file is subject to the terms and conditions of the GNU General Public
- *  License.  See the file COPYING in the main directory of this archive for
- *  more details.
- */
-
-#include <linux/module.h>
-#include <linux/tty.h>
-#include <linux/console.h>
-#include <linux/string.h>
-#include <linux/fb.h>
-
-#include <video/fbcon.h>
-#include <video/fbcon-cfb24.h>
-
-
-    /*
-     *  24 bpp packed pixels
-     */
-
-void fbcon_cfb24_setup(struct display *p)
-{
-    struct fb_info *info = p->fb_info;	
-
-    p->next_line = info->fix.line_length ? info->fix.line_length : p->var.xres_virtual*3;
-    p->next_plane = 0;
-}
-
-void fbcon_cfb24_bmove(struct display *p, int sy, int sx, int dy, int dx,
-		       int height, int width)
-{
-    int bytes = p->next_line, linesize = bytes * fontheight(p), rows;
-    u8 *src, *dst;
-
-    if (sx == 0 && dx == 0 && width * fontwidth(p) * 3 == bytes) {
-	fb_memmove(p->fb_info->screen_base + dy * linesize,
-		  p->fb_info->screen_base + sy * linesize,
-		  height * linesize);
-	return;
-    }
-    if (fontwidthlog(p)) {
-	sx <<= fontwidthlog(p);
-	dx <<= fontwidthlog(p);
-	width <<= fontwidthlog(p);
-    } else {
-	sx *= fontwidth(p);
-	dx *= fontwidth(p);
-	width *= fontwidth(p);
-    }
-    sx *= 3; dx *= 3; width *= 3;
-    if (dy < sy || (dy == sy && dx < sx)) {
-	src = p->fb_info->screen_base + sy * linesize + sx;
-	dst = p->fb_info->screen_base + dy * linesize + dx;
-	for (rows = height * fontheight(p); rows--;) {
-	    fb_memmove(dst, src, width);
-	    src += bytes;
-	    dst += bytes;
-	}
-    } else {
-	src = p->fb_info->screen_base + (sy+height) * linesize + sx - bytes;
-	dst = p->fb_info->screen_base + (dy+height) * linesize + dx - bytes;
-	for (rows = height * fontheight(p); rows--;) {
-	    fb_memmove(dst, src, width);
-	    src -= bytes;
-	    dst -= bytes;
-	}
-    }
-}
-
-#if defined(__BIG_ENDIAN)
-#define convert4to3(in1, in2, in3, in4, out1, out2, out3) \
-    do { \
-	out1 = (in1<<8)  | (in2>>16); \
-	out2 = (in2<<16) | (in3>>8); \
-	out3 = (in3<<24) | in4; \
-    } while (0);
-#elif defined(__LITTLE_ENDIAN)
-#define convert4to3(in1, in2, in3, in4, out1, out2, out3) \
-    do { \
-	out1 = in1       | (in2<<24); \
-	out2 = (in2>> 8) | (in3<<16); \
-	out3 = (in3>>16) | (in4<< 8); \
-    } while (0);
-#else
-#error FIXME: No endianness??
-#endif
-
-static inline void store4pixels(u32 d1, u32 d2, u32 d3, u32 d4, u32 *dest)
-{
-    u32 o1, o2, o3;
-    convert4to3(d1, d2, d3, d4, o1, o2, o3);
-    fb_writel (o1, dest++);
-    fb_writel (o2, dest++);
-    fb_writel (o3, dest);
-}
-
-static inline void rectfill(u8 *dest, int width, int height, u32 data,
-			    int linesize)
-{
-    u32 d1, d2, d3;
-    int i;
-
-    convert4to3(data, data, data, data, d1, d2, d3);
-    while (height-- > 0) {
-	u32 *p = (u32 *)dest;
-	for (i = 0; i < width/4; i++) {
-	    fb_writel(d1, p++);
-	    fb_writel(d2, p++);
-	    fb_writel(d3, p++);
-	}
-	dest += linesize;
-    }
-}
-
-void fbcon_cfb24_clear(struct vc_data *conp, struct display *p, int sy, int sx,
-		       int height, int width)
-{
-    u8 *dest;
-    int bytes = p->next_line, lines = height * fontheight(p);
-    u32 bgx;
-
-    dest = p->fb_info->screen_base + sy * fontheight(p) * bytes + sx * fontwidth(p) * 3;
-
-    bgx = ((u32 *)p->dispsw_data)[attr_bgcol_ec(p, conp)];
-
-    width *= fontwidth(p)/4;
-    if (width * 12 == bytes)
-	rectfill(dest, lines * width * 4, 1, bgx, bytes);
-    else
-	rectfill(dest, width * 4, lines, bgx, bytes);
-}
-
-void fbcon_cfb24_putc(struct vc_data *conp, struct display *p, int c, int yy,
-		      int xx)
-{
-    u8 *dest, *cdat, bits;
-    int bytes = p->next_line, rows;
-    u32 eorx, fgx, bgx, d1, d2, d3, d4;
-
-    dest = p->fb_info->screen_base + yy * fontheight(p) * bytes + xx * fontwidth(p) * 3;
-    if (fontwidth(p) <= 8)
-	cdat = p->fontdata + (c & p->charmask) * fontheight(p);
-    else
-	cdat = p->fontdata + ((c & p->charmask) * fontheight(p) << 1);
-
-    fgx = ((u32 *)p->dispsw_data)[attr_fgcol(p, c)];
-    bgx = ((u32 *)p->dispsw_data)[attr_bgcol(p, c)];
-    eorx = fgx ^ bgx;
-
-    for (rows = fontheight(p); rows--; dest += bytes) {
-	bits = *cdat++;
-	d1 = (-(bits >> 7) & eorx) ^ bgx;
-	d2 = (-(bits >> 6 & 1) & eorx) ^ bgx;
-	d3 = (-(bits >> 5 & 1) & eorx) ^ bgx;
-	d4 = (-(bits >> 4 & 1) & eorx) ^ bgx;
-	store4pixels(d1, d2, d3, d4, (u32 *)dest);
-	if (fontwidth(p) < 8)
-	    continue;
-	d1 = (-(bits >> 3 & 1) & eorx) ^ bgx;
-	d2 = (-(bits >> 2 & 1) & eorx) ^ bgx;
-	d3 = (-(bits >> 1 & 1) & eorx) ^ bgx;
-	d4 = (-(bits & 1) & eorx) ^ bgx;
-	store4pixels(d1, d2, d3, d4, (u32 *)(dest+12));
-	if (fontwidth(p) < 12)
-	    continue;
-	bits = *cdat++;
-	d1 = (-(bits >> 7) & eorx) ^ bgx;
-	d2 = (-(bits >> 6 & 1) & eorx) ^ bgx;
-	d3 = (-(bits >> 5 & 1) & eorx) ^ bgx;
-	d4 = (-(bits >> 4 & 1) & eorx) ^ bgx;
-	store4pixels(d1, d2, d3, d4, (u32 *)(dest+24));
-	if (fontwidth(p) < 16)
-	    continue;
-	d1 = (-(bits >> 3 & 1) & eorx) ^ bgx;
-	d2 = (-(bits >> 2 & 1) & eorx) ^ bgx;
-	d3 = (-(bits >> 1 & 1) & eorx) ^ bgx;
-	d4 = (-(bits & 1) & eorx) ^ bgx;
-	store4pixels(d1, d2, d3, d4, (u32 *)(dest+36));
-    }
-}
-
-void fbcon_cfb24_putcs(struct vc_data *conp, struct display *p,
-		       const unsigned short *s, int count, int yy, int xx)
-{
-    u8 *cdat, *dest, *dest0, bits;
-    u16 c;
-    int rows, bytes = p->next_line;
-    u32 eorx, fgx, bgx, d1, d2, d3, d4;
-
-    dest0 = p->fb_info->screen_base + yy * fontheight(p) * bytes + xx * fontwidth(p) * 3;
-    c = scr_readw(s);
-    fgx = ((u32 *)p->dispsw_data)[attr_fgcol(p, c)];
-    bgx = ((u32 *)p->dispsw_data)[attr_bgcol(p, c)];
-    eorx = fgx ^ bgx;
-    while (count--) {
-	c = scr_readw(s++) & p->charmask;
-	if (fontwidth(p) <= 8)
-	    cdat = p->fontdata + c * fontheight(p);
-	  
-	else
-	    cdat = p->fontdata + (c * fontheight(p) << 1);
-	for (rows = fontheight(p), dest = dest0; rows--; dest += bytes) {
-	    bits = *cdat++;
-	    d1 = (-(bits >> 7) & eorx) ^ bgx;
-	    d2 = (-(bits >> 6 & 1) & eorx) ^ bgx;
-	    d3 = (-(bits >> 5 & 1) & eorx) ^ bgx;
-	    d4 = (-(bits >> 4 & 1) & eorx) ^ bgx;
-	    store4pixels(d1, d2, d3, d4, (u32 *)dest);
-	    if (fontwidth(p) < 8)
-		continue;
-	    d1 = (-(bits >> 3 & 1) & eorx) ^ bgx;
-	    d2 = (-(bits >> 2 & 1) & eorx) ^ bgx;
-	    d3 = (-(bits >> 1 & 1) & eorx) ^ bgx;
-	    d4 = (-(bits & 1) & eorx) ^ bgx;
-	    store4pixels(d1, d2, d3, d4, (u32 *)(dest+12));
-	    if (fontwidth(p) < 12)
-		continue;
-	    bits = *cdat++;
-	    d1 = (-(bits >> 7) & eorx) ^ bgx;
-	    d2 = (-(bits >> 6 & 1) & eorx) ^ bgx;
-	    d3 = (-(bits >> 5 & 1) & eorx) ^ bgx;
-	    d4 = (-(bits >> 4 & 1) & eorx) ^ bgx;
-	    store4pixels(d1, d2, d3, d4, (u32 *)(dest+24));
-	    if (fontwidth(p) < 16)
-		continue;
-	    d1 = (-(bits >> 3 & 1) & eorx) ^ bgx;
-	    d2 = (-(bits >> 2 & 1) & eorx) ^ bgx;
-	    d3 = (-(bits >> 1 & 1) & eorx) ^ bgx;
-	    d4 = (-(bits & 1) & eorx) ^ bgx;
-	    store4pixels(d1, d2, d3, d4, (u32 *)(dest+36));
-	}
-	dest0 += fontwidth(p)*3;
-    }
-}
-
-void fbcon_cfb24_revc(struct display *p, int xx, int yy)
-{
-    u8 *dest;
-    int bytes = p->next_line, rows;
-
-    dest = p->fb_info->screen_base + yy * fontheight(p) * bytes + xx * fontwidth(p) * 3;
-    for (rows = fontheight(p); rows--; dest += bytes) {
-	switch (fontwidth(p)) {
-	case 16:
-	    fb_writel(fb_readl(dest+36) ^ 0xffffffff, dest+36);
-	    fb_writel(fb_readl(dest+40) ^ 0xffffffff, dest+40);
-	    fb_writel(fb_readl(dest+44) ^ 0xffffffff, dest+44);
-	    /* FALL THROUGH */
-	case 12:
-	    fb_writel(fb_readl(dest+24) ^ 0xffffffff, dest+24);
-	    fb_writel(fb_readl(dest+28) ^ 0xffffffff, dest+28);
-	    fb_writel(fb_readl(dest+32) ^ 0xffffffff, dest+32);
-	    /* FALL THROUGH */
-	case 8:
-	    fb_writel(fb_readl(dest+12) ^ 0xffffffff, dest+12);
-	    fb_writel(fb_readl(dest+16) ^ 0xffffffff, dest+16);
-	    fb_writel(fb_readl(dest+20) ^ 0xffffffff, dest+20);
-	    /* FALL THROUGH */
-	case 4:
-	    fb_writel(fb_readl(dest+0) ^ 0xffffffff, dest+0);
-	    fb_writel(fb_readl(dest+4) ^ 0xffffffff, dest+4);
-	    fb_writel(fb_readl(dest+8) ^ 0xffffffff, dest+8);
-	}
-    }
-}
-
-void fbcon_cfb24_clear_margins(struct vc_data *conp, struct display *p,
-			       int bottom_only)
-{
-    int bytes = p->next_line;
-    u32 bgx;
-
-    unsigned int right_start = conp->vc_cols*fontwidth(p);
-    unsigned int bottom_start = conp->vc_rows*fontheight(p);
-    unsigned int right_width, bottom_width;
-
-    bgx = ((u32 *)p->dispsw_data)[attr_bgcol_ec(p, conp)];
-
-    if (!bottom_only && (right_width = p->var.xres-right_start))
-	rectfill(p->fb_info->screen_base+right_start*3, right_width,
-		 p->var.yres_virtual, bgx, bytes);
-    if ((bottom_width = p->var.yres-bottom_start))
-	rectfill(p->fb_info->screen_base+(p->var.yoffset+bottom_start)*bytes,
-		 right_start, bottom_width, bgx, bytes);
-}
-
-
-    /*
-     *  `switch' for the low level operations
-     */
-
-struct display_switch fbcon_cfb24 = {
-    setup:		fbcon_cfb24_setup,
-    bmove:		fbcon_cfb24_bmove,
-    clear:		fbcon_cfb24_clear,
-    putc:		fbcon_cfb24_putc,
-    putcs:		fbcon_cfb24_putcs,
-    revc:		fbcon_cfb24_revc,
-    clear_margins:	fbcon_cfb24_clear_margins,
-    fontwidthmask:	FONTWIDTH(4)|FONTWIDTH(8)|FONTWIDTH(12)|FONTWIDTH(16)
-};
-
-
-#ifdef MODULE
-MODULE_LICENSE("GPL");
-
-int init_module(void)
-{
-    return 0;
-}
-
-void cleanup_module(void)
-{}
-#endif /* MODULE */
-
-
-    /*
-     *  Visible symbols for modules
-     */
-
-EXPORT_SYMBOL(fbcon_cfb24);
-EXPORT_SYMBOL(fbcon_cfb24_setup);
-EXPORT_SYMBOL(fbcon_cfb24_bmove);
-EXPORT_SYMBOL(fbcon_cfb24_clear);
-EXPORT_SYMBOL(fbcon_cfb24_putc);
-EXPORT_SYMBOL(fbcon_cfb24_putcs);
-EXPORT_SYMBOL(fbcon_cfb24_revc);
-EXPORT_SYMBOL(fbcon_cfb24_clear_margins);
diff --git a/drivers/video/fbcon-cfb32.c b/drivers/video/fbcon-cfb32.c
deleted file mode 100644
index 76e7036109601ed641f63828cca73945b2ee1bb1..0000000000000000000000000000000000000000
--- a/drivers/video/fbcon-cfb32.c
+++ /dev/null
@@ -1,305 +0,0 @@
-/*
- *  linux/drivers/video/cfb32.c -- Low level frame buffer operations for 32 bpp
- *				   truecolor packed pixels
- *
- *	Created 28 Dec 1997 by Geert Uytterhoeven
- *
- *  This file is subject to the terms and conditions of the GNU General Public
- *  License.  See the file COPYING in the main directory of this archive for
- *  more details.
- */
-
-#include <linux/module.h>
-#include <linux/tty.h>
-#include <linux/console.h>
-#include <linux/string.h>
-#include <linux/fb.h>
-
-#include <video/fbcon.h>
-#include <video/fbcon-cfb32.h>
-
-
-    /*
-     *  32 bpp packed pixels
-     */
-
-void fbcon_cfb32_setup(struct display *p)
-{
-    p->next_line = p->fb_info->fix.line_length ? p->fb_info->fix.line_length : p->var.xres_virtual<<2;
-    p->next_plane = 0;
-}
-
-void fbcon_cfb32_bmove(struct display *p, int sy, int sx, int dy, int dx,
-		       int height, int width)
-{
-    int bytes = p->next_line, linesize = bytes * fontheight(p), rows;
-    u8 *src, *dst;
-
-    if (sx == 0 && dx == 0 && width * fontwidth(p) * 4 == bytes) {
-	fb_memmove(p->fb_info->screen_base + dy * linesize,
-		  p->fb_info->screen_base + sy * linesize,
-		  height * linesize);
-	return;
-    }
-    if (fontwidthlog(p)) {
-	sx <<= fontwidthlog(p)+2;
-	dx <<= fontwidthlog(p)+2;
-	width <<= fontwidthlog(p)+2;
-    } else {
-	sx *= fontwidth(p)*4;
-	dx *= fontwidth(p)*4;
-	width *= fontwidth(p)*4;
-    }
-    if (dy < sy || (dy == sy && dx < sx)) {
-	src = p->fb_info->screen_base + sy * linesize + sx;
-	dst = p->fb_info->screen_base + dy * linesize + dx;
-	for (rows = height * fontheight(p); rows--;) {
-	    fb_memmove(dst, src, width);
-	    src += bytes;
-	    dst += bytes;
-	}
-    } else {
-	src = p->fb_info->screen_base + (sy+height) * linesize + sx - bytes;
-	dst = p->fb_info->screen_base + (dy+height) * linesize + dx - bytes;
-	for (rows = height * fontheight(p); rows--;) {
-	    fb_memmove(dst, src, width);
-	    src -= bytes;
-	    dst -= bytes;
-	}
-    }
-}
-
-static inline void rectfill(u8 *dest, int width, int height, u32 data,
-			    int linesize)
-{
-    int i;
-
-    while (height-- > 0) {
-	u32 *p = (u32 *)dest;
-	for (i = 0; i < width/4; i++) {
-	    fb_writel(data, p++);
-	    fb_writel(data, p++);
-	    fb_writel(data, p++);
-	    fb_writel(data, p++);
-	}
-	if (width & 2) {
-	    fb_writel(data, p++);
-	    fb_writel(data, p++);
-	}
-	if (width & 1)
-	    fb_writel(data, p++);
-	dest += linesize;
-    }
-}
-
-void fbcon_cfb32_clear(struct vc_data *conp, struct display *p, int sy, int sx,
-		       int height, int width)
-{
-    u8 *dest;
-    int bytes = p->next_line, lines = height * fontheight(p);
-    u32 bgx;
-
-    dest = p->fb_info->screen_base + sy * fontheight(p) * bytes + sx * fontwidth(p) * 4;
-
-    bgx = ((u32 *)p->dispsw_data)[attr_bgcol_ec(p, conp)];
-
-    width *= fontwidth(p)/4;
-    if (width * 16 == bytes)
-	rectfill(dest, lines * width * 4, 1, bgx, bytes);
-    else
-	rectfill(dest, width * 4, lines, bgx, bytes);
-}
-
-void fbcon_cfb32_putc(struct vc_data *conp, struct display *p, int c, int yy,
-		      int xx)
-{
-    u8 *dest, *cdat, bits;
-    int bytes = p->next_line, rows;
-    u32 eorx, fgx, bgx, *pt;
-
-    dest = p->fb_info->screen_base + yy * fontheight(p) * bytes + xx * fontwidth(p) * 4;
-    if (fontwidth(p) <= 8)
-	cdat = p->fontdata + (c & p->charmask) * fontheight(p);
-    else
-	cdat = p->fontdata + ((c & p->charmask) * fontheight(p) << 1);
-    fgx = ((u32 *)p->dispsw_data)[attr_fgcol(p, c)];
-    bgx = ((u32 *)p->dispsw_data)[attr_bgcol(p, c)];
-    eorx = fgx ^ bgx;
-
-    for (rows = fontheight(p); rows--; dest += bytes) {
-	bits = *cdat++;
-	pt = (u32 *) dest;
-	fb_writel((-(bits >> 7) & eorx) ^ bgx, pt++);
-	fb_writel((-(bits >> 6 & 1) & eorx) ^ bgx, pt++);
-	fb_writel((-(bits >> 5 & 1) & eorx) ^ bgx, pt++);
-	fb_writel((-(bits >> 4 & 1) & eorx) ^ bgx, pt++);
-	if (fontwidth(p) < 8)
-	    continue;
-	fb_writel((-(bits >> 3 & 1) & eorx) ^ bgx, pt++);
-	fb_writel((-(bits >> 2 & 1) & eorx) ^ bgx, pt++);
-	fb_writel((-(bits >> 1 & 1) & eorx) ^ bgx, pt++);
-	fb_writel((-(bits & 1) & eorx) ^ bgx, pt++);
-	if (fontwidth(p) < 12)
-	    continue;
-	bits = *cdat++;
-	fb_writel((-(bits >> 7) & eorx) ^ bgx, pt++);
-	fb_writel((-(bits >> 6 & 1) & eorx) ^ bgx, pt++);
-	fb_writel((-(bits >> 5 & 1) & eorx) ^ bgx, pt++);
-	fb_writel((-(bits >> 4 & 1) & eorx) ^ bgx, pt++);
-	if (fontwidth(p) < 16)
-	    continue;
-	fb_writel((-(bits >> 3 & 1) & eorx) ^ bgx, pt++);
-	fb_writel((-(bits >> 2 & 1) & eorx) ^ bgx, pt++);
-	fb_writel((-(bits >> 1 & 1) & eorx) ^ bgx, pt++);
-	fb_writel((-(bits & 1) & eorx) ^ bgx, pt++);
-    }
-}
-
-void fbcon_cfb32_putcs(struct vc_data *conp, struct display *p,
-		       const unsigned short *s, int count, int yy, int xx)
-{
-    u8 *cdat, *dest, *dest0, bits;
-    u16 c;
-    int rows, bytes = p->next_line;
-    u32 eorx, fgx, bgx, *pt;
-
-    dest0 = p->fb_info->screen_base + yy * fontheight(p) * bytes + xx * fontwidth(p) * 4;
-    c = scr_readw(s);
-    fgx = ((u32 *)p->dispsw_data)[attr_fgcol(p, c)];
-    bgx = ((u32 *)p->dispsw_data)[attr_bgcol(p, c)];
-    eorx = fgx ^ bgx;
-    while (count--) {
-	c = scr_readw(s++) & p->charmask;
-	if (fontwidth(p) <= 8)
-	    cdat = p->fontdata + c * fontheight(p);
-	else
-	    cdat = p->fontdata + (c * fontheight(p) << 1);
-	for (rows = fontheight(p), dest = dest0; rows--; dest += bytes) {
-	    bits = *cdat++;
-	    pt = (u32 *) dest;
-	    fb_writel((-(bits >> 7) & eorx) ^ bgx, pt++);
-	    fb_writel((-(bits >> 6 & 1) & eorx) ^ bgx, pt++);
-	    fb_writel((-(bits >> 5 & 1) & eorx) ^ bgx, pt++);
-	    fb_writel((-(bits >> 4 & 1) & eorx) ^ bgx, pt++);
-	    if (fontwidth(p) < 8)
-		continue;
-	    fb_writel((-(bits >> 3 & 1) & eorx) ^ bgx, pt++);
-	    fb_writel((-(bits >> 2 & 1) & eorx) ^ bgx, pt++);
-	    fb_writel((-(bits >> 1 & 1) & eorx) ^ bgx, pt++);
-	    fb_writel((-(bits & 1) & eorx) ^ bgx, pt++);
-	    if (fontwidth(p) < 12)
-		continue;
-	    bits = *cdat++;
-	    fb_writel((-(bits >> 7) & eorx) ^ bgx, pt++);
-	    fb_writel((-(bits >> 6 & 1) & eorx) ^ bgx, pt++);
-	    fb_writel((-(bits >> 5 & 1) & eorx) ^ bgx, pt++);
-	    fb_writel((-(bits >> 4 & 1) & eorx) ^ bgx, pt++);
-	    if (fontwidth(p) < 16)
-		continue;
-	    fb_writel((-(bits >> 3 & 1) & eorx) ^ bgx, pt++);
-	    fb_writel((-(bits >> 2 & 1) & eorx) ^ bgx, pt++);
-	    fb_writel((-(bits >> 1 & 1) & eorx) ^ bgx, pt++);
-	    fb_writel((-(bits & 1) & eorx) ^ bgx, pt++);
-	}
-	dest0 += fontwidth(p)*4;
-    }
-}
-
-void fbcon_cfb32_revc(struct display *p, int xx, int yy)
-{
-    u8 *dest;
-    int bytes = p->next_line, rows;
-
-    dest = p->fb_info->screen_base + yy * fontheight(p) * bytes + xx * fontwidth(p) * 4;
-    for (rows = fontheight(p); rows--; dest += bytes) {
-	switch (fontwidth(p)) {
-	case 16:
-	    fb_writel(fb_readl(dest+(4*12)) ^ 0xffffffff, dest+(4*12));
-	    fb_writel(fb_readl(dest+(4*13)) ^ 0xffffffff, dest+(4*13));
-	    fb_writel(fb_readl(dest+(4*14)) ^ 0xffffffff, dest+(4*14));
-	    fb_writel(fb_readl(dest+(4*15)) ^ 0xffffffff, dest+(4*15));
-	    /* FALL THROUGH */
-	case 12:
-	    fb_writel(fb_readl(dest+(4*8)) ^ 0xffffffff, dest+(4*8));
-	    fb_writel(fb_readl(dest+(4*9)) ^ 0xffffffff, dest+(4*9));
-	    fb_writel(fb_readl(dest+(4*10)) ^ 0xffffffff, dest+(4*10));
-	    fb_writel(fb_readl(dest+(4*11)) ^ 0xffffffff, dest+(4*11));
-	    /* FALL THROUGH */
-	case 8:
-	    fb_writel(fb_readl(dest+(4*4)) ^ 0xffffffff, dest+(4*4));
-	    fb_writel(fb_readl(dest+(4*5)) ^ 0xffffffff, dest+(4*5));
-	    fb_writel(fb_readl(dest+(4*6)) ^ 0xffffffff, dest+(4*6));
-	    fb_writel(fb_readl(dest+(4*7)) ^ 0xffffffff, dest+(4*7));
-	    /* FALL THROUGH */
-	case 4:
-	    fb_writel(fb_readl(dest+(4*0)) ^ 0xffffffff, dest+(4*0));
-	    fb_writel(fb_readl(dest+(4*1)) ^ 0xffffffff, dest+(4*1));
-	    fb_writel(fb_readl(dest+(4*2)) ^ 0xffffffff, dest+(4*2));
-	    fb_writel(fb_readl(dest+(4*3)) ^ 0xffffffff, dest+(4*3));
-	    /* FALL THROUGH */
-	}
-    }
-}
-
-void fbcon_cfb32_clear_margins(struct vc_data *conp, struct display *p,
-			       int bottom_only)
-{
-    int bytes = p->next_line;
-    u32 bgx;
-
-    unsigned int right_start = conp->vc_cols*fontwidth(p);
-    unsigned int bottom_start = conp->vc_rows*fontheight(p);
-    unsigned int right_width, bottom_width;
-
-    bgx = ((u32 *)p->dispsw_data)[attr_bgcol_ec(p, conp)];
-
-    if (!bottom_only && (right_width = p->var.xres-right_start))
-	rectfill(p->fb_info->screen_base+right_start*4, right_width,
-		 p->var.yres_virtual, bgx, bytes);
-    if ((bottom_width = p->var.yres-bottom_start))
-	rectfill(p->fb_info->screen_base+(p->var.yoffset+bottom_start)*bytes,
-		 right_start, bottom_width, bgx, bytes);
-}
-
-
-    /*
-     *  `switch' for the low level operations
-     */
-
-struct display_switch fbcon_cfb32 = {
-    setup:		fbcon_cfb32_setup,
-    bmove:		fbcon_cfb32_bmove,
-    clear:		fbcon_cfb32_clear,
-    putc:		fbcon_cfb32_putc,
-    putcs:		fbcon_cfb32_putcs,
-    revc:		fbcon_cfb32_revc,
-    clear_margins:	fbcon_cfb32_clear_margins,
-    fontwidthmask:	FONTWIDTH(4)|FONTWIDTH(8)|FONTWIDTH(12)|FONTWIDTH(16)
-};
-
-
-#ifdef MODULE
-MODULE_LICENSE("GPL");
-
-int init_module(void)
-{
-    return 0;
-}
-
-void cleanup_module(void)
-{}
-#endif /* MODULE */
-
-
-    /*
-     *  Visible symbols for modules
-     */
-
-EXPORT_SYMBOL(fbcon_cfb32);
-EXPORT_SYMBOL(fbcon_cfb32_setup);
-EXPORT_SYMBOL(fbcon_cfb32_bmove);
-EXPORT_SYMBOL(fbcon_cfb32_clear);
-EXPORT_SYMBOL(fbcon_cfb32_putc);
-EXPORT_SYMBOL(fbcon_cfb32_putcs);
-EXPORT_SYMBOL(fbcon_cfb32_revc);
-EXPORT_SYMBOL(fbcon_cfb32_clear_margins);
diff --git a/drivers/video/fbcon-cfb4.c b/drivers/video/fbcon-cfb4.c
deleted file mode 100644
index 5af563a659658edf848298a01965b0916c4a5f0c..0000000000000000000000000000000000000000
--- a/drivers/video/fbcon-cfb4.c
+++ /dev/null
@@ -1,229 +0,0 @@
-/*
- *  linux/drivers/video/cfb4.c -- Low level frame buffer operations for 4 bpp
- *				  packed pixels
- *
- *	Created 26 Dec 1997 by Michael Schmitz
- *	Based on the old macfb.c 4bpp code by Alan Cox
- *
- *  This file is subject to the terms and conditions of the GNU General Public
- *  License.  See the file COPYING in the main directory of this archive for
- *  more details.
- */
-
-#include <linux/module.h>
-#include <linux/tty.h>
-#include <linux/console.h>
-#include <linux/string.h>
-#include <linux/fb.h>
-
-#include <video/fbcon.h>
-#include <video/fbcon-cfb4.h>
-
-
-    /*
-     *  4 bpp packed pixels
-     */
-
-    /*
-     *  IFF the font is even pixel aligned (that is to say each
-     *  character start is a byte start in the pixel pairs). That
-     *  avoids us having to mask bytes and means we won't be here
-     *  all week. On a MacII that matters _lots_
-     */
-
-static u16 nibbletab_cfb4[] = {
-#if defined(__BIG_ENDIAN)
-    0x0000,0x000f,0x00f0,0x00ff,
-    0x0f00,0x0f0f,0x0ff0,0x0fff,
-    0xf000,0xf00f,0xf0f0,0xf0ff,
-    0xff00,0xff0f,0xfff0,0xffff
-#elif defined(__LITTLE_ENDIAN)
-    0x0000,0xf000,0x0f00,0xff00,
-    0x00f0,0xf0f0,0x0ff0,0xfff0,
-    0x000f,0xf00f,0x0f0f,0xff0f,
-    0x00ff,0xf0ff,0x0fff,0xffff
-#else
-#error FIXME: No endianness??
-#endif
-
-};
-
-void fbcon_cfb4_setup(struct display *p)
-{
-    p->next_line = p->fb_info->fix.line_length ? p->fb_info->fix.line_length : p->var.xres_virtual>>1;
-    p->next_plane = 0;
-}
-
-void fbcon_cfb4_bmove(struct display *p, int sy, int sx, int dy, int dx,
-		      int height, int width)
-{
-	int bytes = p->next_line, linesize = bytes * fontheight(p), rows;
-	u8 *src,*dst;
-
-	if (sx == 0 && dx == 0 && width * 4 == bytes) {
-		fb_memmove(p->fb_info->screen_base + dy * linesize,
-			  p->fb_info->screen_base + sy * linesize,
-			  height * linesize);
-	}
-	else {
-		if (dy < sy || (dy == sy && dx < sx)) {
-			src = p->fb_info->screen_base + sy * linesize + sx * 4;
-			dst = p->fb_info->screen_base + dy * linesize + dx * 4;
-			for (rows = height * fontheight(p) ; rows-- ;) {
-				fb_memmove(dst, src, width * 4);
-				src += bytes;
-				dst += bytes;
-			}
-		}
-		else {
-			src = p->fb_info->screen_base + (sy+height) * linesize + sx * 4 - bytes;
-			dst = p->fb_info->screen_base + (dy+height) * linesize + dx * 4 - bytes;
-			for (rows = height * fontheight(p) ; rows-- ;) {
-				fb_memmove(dst, src, width * 4);
-				src -= bytes;
-				dst -= bytes;
-			}
-		}
-	}
-}
-
-void fbcon_cfb4_clear(struct vc_data *conp, struct display *p, int sy, int sx,
-		      int height, int width)
-{
-	u8 *dest0,*dest;
-	int bytes=p->next_line,lines=height * fontheight(p), rows, i;
-	u32 bgx;
-
-/*	if(p->fb_info->screen_base!=0xFDD00020)
-		mac_boom(1);*/
-	dest = p->fb_info->screen_base + sy * fontheight(p) * bytes + sx * 4;
-
-	bgx=attr_bgcol_ec(p,conp);
-	bgx |= (bgx << 4);	/* expand the colour to 32bits */
-	bgx |= (bgx << 8);
-	bgx |= (bgx << 16);
-
-	if (sx == 0 && width * 4 == bytes) {
-		for (i = 0 ; i < lines * width ; i++) {
-			fb_writel (bgx, dest);
-			dest+=4;
-		}
-	} else {
-		dest0=dest;
-		for (rows = lines; rows-- ; dest0 += bytes) {
-			dest=dest0;
-			for (i = 0 ; i < width ; i++) {
-				/* memset ?? */
-				fb_writel (bgx, dest);
-				dest+=4;
-			}
-		}
-	}
-}
-
-void fbcon_cfb4_putc(struct vc_data *conp, struct display *p, int c, int yy,
-		     int xx)
-{
-	u8 *dest,*cdat;
-	int bytes=p->next_line,rows;
-	u32 eorx,fgx,bgx;
-
-	dest = p->fb_info->screen_base + yy * fontheight(p) * bytes + xx * 4;
-	cdat = p->fontdata + (c & p->charmask) * fontheight(p);
-
-	fgx=attr_fgcol(p,c);
-	bgx=attr_bgcol(p,c);
-	fgx |= (fgx << 4);
-	fgx |= (fgx << 8);
-	bgx |= (bgx << 4);
-	bgx |= (bgx << 8);
-	eorx = fgx ^ bgx;
-
-	for (rows = fontheight(p) ; rows-- ; dest += bytes) {
-		fb_writew((nibbletab_cfb4[*cdat >> 4] & eorx) ^ bgx, dest+0);
-		fb_writew((nibbletab_cfb4[*cdat++ & 0xf] & eorx) ^ bgx, dest+2);
-	}
-}
-
-void fbcon_cfb4_putcs(struct vc_data *conp, struct display *p, 
-		      const unsigned short *s, int count, int yy, int xx)
-{
-	u8 *cdat, *dest, *dest0;
-	u16 c;
-	int rows,bytes=p->next_line;
-	u32 eorx, fgx, bgx;
-
-	dest0 = p->fb_info->screen_base + yy * fontheight(p) * bytes + xx * 4;
-	c = scr_readw(s);
-	fgx = attr_fgcol(p, c);
-	bgx = attr_bgcol(p, c);
-	fgx |= (fgx << 4);
-	fgx |= (fgx << 8);
-	fgx |= (fgx << 16);
-	bgx |= (bgx << 4);
-	bgx |= (bgx << 8);
-	bgx |= (bgx << 16);
-	eorx = fgx ^ bgx;
-	while (count--) {
-		c = scr_readw(s++) & p->charmask;
-		cdat = p->fontdata + c * fontheight(p);
-
-		for (rows = fontheight(p), dest = dest0; rows-- ; dest += bytes) {
-			fb_writew((nibbletab_cfb4[*cdat >> 4] & eorx) ^ bgx, dest+0);
-			fb_writew((nibbletab_cfb4[*cdat++ & 0xf] & eorx) ^ bgx, dest+2);
-		}
-		dest0+=4;
-	}
-}
-
-void fbcon_cfb4_revc(struct display *p, int xx, int yy)
-{
-	u8 *dest;
-	int bytes=p->next_line, rows;
-
-	dest = p->fb_info->screen_base + yy * fontheight(p) * bytes + xx * 4;
-	for (rows = fontheight(p) ; rows-- ; dest += bytes) {
-		fb_writel(fb_readl(dest+0) ^ 0xffffffff, dest+0);
-	}
-}
-
-
-    /*
-     *  `switch' for the low level operations
-     */
-
-struct display_switch fbcon_cfb4 = {
-    setup:		fbcon_cfb4_setup,
-    bmove:		fbcon_cfb4_bmove,
-    clear:		fbcon_cfb4_clear,
-    putc:		fbcon_cfb4_putc,
-    putcs:		fbcon_cfb4_putcs,
-    revc:		fbcon_cfb4_revc,
-    fontwidthmask:	FONTWIDTH(8)
-};
-
-
-#ifdef MODULE
-MODULE_LICENSE("GPL");
-
-int init_module(void)
-{
-    return 0;
-}
-
-void cleanup_module(void)
-{}
-#endif /* MODULE */
-
-
-    /*
-     *  Visible symbols for modules
-     */
-
-EXPORT_SYMBOL(fbcon_cfb4);
-EXPORT_SYMBOL(fbcon_cfb4_setup);
-EXPORT_SYMBOL(fbcon_cfb4_bmove);
-EXPORT_SYMBOL(fbcon_cfb4_clear);
-EXPORT_SYMBOL(fbcon_cfb4_putc);
-EXPORT_SYMBOL(fbcon_cfb4_putcs);
-EXPORT_SYMBOL(fbcon_cfb4_revc);
diff --git a/drivers/video/fbcon-cfb8.c b/drivers/video/fbcon-cfb8.c
deleted file mode 100644
index 1ac103832e2a62d429ec7b4aac0d4a23679ddca4..0000000000000000000000000000000000000000
--- a/drivers/video/fbcon-cfb8.c
+++ /dev/null
@@ -1,294 +0,0 @@
-/*
- *  linux/drivers/video/cfb8.c -- Low level frame buffer operations for 8 bpp
- *				  packed pixels
- *
- *	Created 5 Apr 1997 by Geert Uytterhoeven
- *
- *  This file is subject to the terms and conditions of the GNU General Public
- *  License.  See the file COPYING in the main directory of this archive for
- *  more details.
- */
-
-#include <linux/module.h>
-#include <linux/tty.h>
-#include <linux/console.h>
-#include <linux/string.h>
-#include <linux/fb.h>
-
-#include <video/fbcon.h>
-#include <video/fbcon-cfb8.h>
-
-
-    /*
-     *  8 bpp packed pixels
-     */
-
-static u32 nibbletab_cfb8[] = {
-#if defined(__BIG_ENDIAN)
-    0x00000000,0x000000ff,0x0000ff00,0x0000ffff,
-    0x00ff0000,0x00ff00ff,0x00ffff00,0x00ffffff,
-    0xff000000,0xff0000ff,0xff00ff00,0xff00ffff,
-    0xffff0000,0xffff00ff,0xffffff00,0xffffffff
-#elif defined(__LITTLE_ENDIAN)
-    0x00000000,0xff000000,0x00ff0000,0xffff0000,
-    0x0000ff00,0xff00ff00,0x00ffff00,0xffffff00,
-    0x000000ff,0xff0000ff,0x00ff00ff,0xffff00ff,
-    0x0000ffff,0xff00ffff,0x00ffffff,0xffffffff
-#else
-#error FIXME: No endianness??
-#endif
-};
-
-void fbcon_cfb8_setup(struct display *p)
-{
-    p->next_line = p->fb_info->fix.line_length ? p->fb_info->fix.line_length : p->var.xres_virtual;
-    p->next_plane = 0;
-}
-
-void fbcon_cfb8_bmove(struct display *p, int sy, int sx, int dy, int dx,
-		      int height, int width)
-{
-    int bytes = p->next_line, linesize = bytes * fontheight(p), rows;
-    u8 *src,*dst;
-
-    if (sx == 0 && dx == 0 && width * fontwidth(p) == bytes) {
-	fb_memmove(p->fb_info->screen_base + dy * linesize,
-		  p->fb_info->screen_base + sy * linesize,
-		  height * linesize);
-	return;
-    }
-    if (fontwidthlog(p)) {
-    	sx <<= fontwidthlog(p); dx <<= fontwidthlog(p); width <<= fontwidthlog(p);
-    } else {
-    	sx *= fontwidth(p); dx *= fontwidth(p); width *= fontwidth(p);
-    }
-    if (dy < sy || (dy == sy && dx < sx)) {
-	src = p->fb_info->screen_base + sy * linesize + sx;
-	dst = p->fb_info->screen_base + dy * linesize + dx;
-	for (rows = height * fontheight(p) ; rows-- ;) {
-	    fb_memmove(dst, src, width);
-	    src += bytes;
-	    dst += bytes;
-	}
-    } else {
-	src = p->fb_info->screen_base + (sy+height) * linesize + sx - bytes;
-	dst = p->fb_info->screen_base + (dy+height) * linesize + dx - bytes;
-	for (rows = height * fontheight(p) ; rows-- ;) {
-	    fb_memmove(dst, src, width);
-	    src -= bytes;
-	    dst -= bytes;
-	}
-    }
-}
-
-static inline void rectfill(u8 *dest, int width, int height, u8 data,
-			    int linesize)
-{
-    while (height-- > 0) {
-	fb_memset(dest, data, width);
-	dest += linesize;
-    }
-}
-
-void fbcon_cfb8_clear(struct vc_data *conp, struct display *p, int sy, int sx,
-		      int height, int width)
-{
-    u8 *dest;
-    int bytes=p->next_line,lines=height * fontheight(p);
-    u8 bgx;
-
-    dest = p->fb_info->screen_base + sy * fontheight(p) * bytes + sx * fontwidth(p);
-
-    bgx=attr_bgcol_ec(p,conp);
-
-    width *= fontwidth(p);
-    if (width == bytes)
-	rectfill(dest, lines * width, 1, bgx, bytes);
-    else
-	rectfill(dest, width, lines, bgx, bytes);
-}
-
-void fbcon_cfb8_putc(struct vc_data *conp, struct display *p, int c, int yy,
-		     int xx)
-{
-    u8 *dest,*cdat;
-    int bytes=p->next_line,rows;
-    u32 eorx,fgx,bgx;
-
-    dest = p->fb_info->screen_base + yy * fontheight(p) * bytes + xx * fontwidth(p);
-    if (fontwidth(p) <= 8)
-	cdat = p->fontdata + (c & p->charmask) * fontheight(p);
-    else
-	cdat = p->fontdata + ((c & p->charmask) * fontheight(p) << 1);
-
-    fgx=attr_fgcol(p,c);
-    bgx=attr_bgcol(p,c);
-    fgx |= (fgx << 8);
-    fgx |= (fgx << 16);
-    bgx |= (bgx << 8);
-    bgx |= (bgx << 16);
-    eorx = fgx ^ bgx;
-
-    switch (fontwidth(p)) {
-    case 4:
-	for (rows = fontheight(p) ; rows-- ; dest += bytes)
-	    fb_writel((nibbletab_cfb8[*cdat++ >> 4] & eorx) ^ bgx, dest);
-        break;
-    case 8:
-	for (rows = fontheight(p) ; rows-- ; dest += bytes) {
-	    fb_writel((nibbletab_cfb8[*cdat >> 4] & eorx) ^ bgx, dest);
-	    fb_writel((nibbletab_cfb8[*cdat++ & 0xf] & eorx) ^ bgx, dest+4);
-        }
-        break;
-    case 12:
-    case 16:
-	for (rows = fontheight(p) ; rows-- ; dest += bytes) {
-	    fb_writel((nibbletab_cfb8[*cdat >> 4] & eorx) ^ bgx, dest);
-	    fb_writel((nibbletab_cfb8[*cdat++ & 0xf] & eorx) ^ bgx, dest+4);
-	    fb_writel((nibbletab_cfb8[(*cdat >> 4) & 0xf] & eorx) ^ bgx, dest+8);
-	    if (fontwidth(p) == 16)
-		fb_writel((nibbletab_cfb8[*cdat & 0xf] & eorx) ^ bgx, dest+12);
-	    cdat++;
-        }
-        break;
-    }
-}
-
-void fbcon_cfb8_putcs(struct vc_data *conp, struct display *p, 
-		      const unsigned short *s, int count, int yy, int xx)
-{
-    u8 *cdat, *dest, *dest0;
-    u16 c;
-    int rows,bytes=p->next_line;
-    u32 eorx, fgx, bgx;
-
-    dest0 = p->fb_info->screen_base + yy * fontheight(p) * bytes + xx * fontwidth(p);
-    c = scr_readw(s);
-    fgx = attr_fgcol(p, c);
-    bgx = attr_bgcol(p, c);
-    fgx |= (fgx << 8);
-    fgx |= (fgx << 16);
-    bgx |= (bgx << 8);
-    bgx |= (bgx << 16);
-    eorx = fgx ^ bgx;
-    switch (fontwidth(p)) {
-    case 4:
-	while (count--) {
-	    c = scr_readw(s++) & p->charmask;
-	    cdat = p->fontdata + c * fontheight(p);
-
-	    for (rows = fontheight(p), dest = dest0; rows-- ; dest += bytes)
-		fb_writel((nibbletab_cfb8[*cdat++ >> 4] & eorx) ^ bgx, dest);
-	    dest0+=4;
-        }
-        break;
-    case 8:
-	while (count--) {
-	    c = scr_readw(s++) & p->charmask;
-	    cdat = p->fontdata + c * fontheight(p);
-
-	    for (rows = fontheight(p), dest = dest0; rows-- ; dest += bytes) {
-		fb_writel((nibbletab_cfb8[*cdat >> 4] & eorx) ^ bgx, dest);
-		fb_writel((nibbletab_cfb8[*cdat++ & 0xf] & eorx) ^ bgx, dest+4);
-	    }
-	    dest0+=8;
-        }
-        break;
-    case 12:
-    case 16:
-	while (count--) {
-	    c = scr_readw(s++) & p->charmask;
-	    cdat = p->fontdata + (c * fontheight(p) << 1);
-
-	    for (rows = fontheight(p), dest = dest0; rows-- ; dest += bytes) {
-		fb_writel((nibbletab_cfb8[*cdat >> 4] & eorx) ^ bgx, dest);
-		fb_writel((nibbletab_cfb8[*cdat++ & 0xf] & eorx) ^ bgx, dest+4);
-		fb_writel((nibbletab_cfb8[(*cdat >> 4) & 0xf] & eorx) ^ bgx, dest+8);
-		if (fontwidth(p) == 16)
-		   fb_writel((nibbletab_cfb8[*cdat & 0xf] & eorx) ^ bgx, dest+12);
-		cdat++;
-	    }
-	    dest0+=fontwidth(p);
-        }
-        break;
-    }
-}
-
-void fbcon_cfb8_revc(struct display *p, int xx, int yy)
-{
-    u8 *dest;
-    int bytes=p->next_line, rows;
-
-    dest = p->fb_info->screen_base + yy * fontheight(p) * bytes + xx * fontwidth(p);
-    for (rows = fontheight(p) ; rows-- ; dest += bytes) {
-    	switch (fontwidth(p)) {
-    	case 16: fb_writel(fb_readl(dest+12) ^ 0x0f0f0f0f, dest+12); /* fall thru */
-    	case 12: fb_writel(fb_readl(dest+8) ^ 0x0f0f0f0f, dest+8); /* fall thru */
-    	case 8: fb_writel(fb_readl(dest+4) ^ 0x0f0f0f0f, dest+4); /* fall thru */
-    	case 4: fb_writel(fb_readl(dest) ^ 0x0f0f0f0f, dest); /* fall thru */
-    	default: break;
-    	}
-    }
-}
-
-void fbcon_cfb8_clear_margins(struct vc_data *conp, struct display *p,
-			      int bottom_only)
-{
-    int bytes=p->next_line;
-    u8 bgx;
-
-    unsigned int right_start = conp->vc_cols*fontwidth(p);
-    unsigned int bottom_start = conp->vc_rows*fontheight(p);
-    unsigned int right_width, bottom_width;
-
-    bgx=attr_bgcol_ec(p,conp);
-
-    if (!bottom_only && (right_width = p->var.xres-right_start))
-	rectfill(p->fb_info->screen_base+right_start, right_width, p->var.yres_virtual, bgx, bytes);
-    if ((bottom_width = p->var.yres-bottom_start))
-	rectfill(p->fb_info->screen_base+(p->var.yoffset+bottom_start)*bytes,
-		 right_start, bottom_width, bgx, bytes);
-}
-
-
-    /*
-     *  `switch' for the low level operations
-     */
-
-struct display_switch fbcon_cfb8 = {
-    setup:		fbcon_cfb8_setup,
-    bmove:		fbcon_cfb8_bmove,
-    clear:		fbcon_cfb8_clear,
-    putc:		fbcon_cfb8_putc,
-    putcs:		fbcon_cfb8_putcs,
-    revc:		fbcon_cfb8_revc,
-    clear_margins:	fbcon_cfb8_clear_margins,
-    fontwidthmask:	FONTWIDTH(4)|FONTWIDTH(8)|FONTWIDTH(12)|FONTWIDTH(16)
-};
-
-
-#ifdef MODULE
-MODULE_LICENSE("GPL");
-
-int init_module(void)
-{
-    return 0;
-}
-
-void cleanup_module(void)
-{}
-#endif /* MODULE */
-
-
-    /*
-     *  Visible symbols for modules
-     */
-
-EXPORT_SYMBOL(fbcon_cfb8);
-EXPORT_SYMBOL(fbcon_cfb8_setup);
-EXPORT_SYMBOL(fbcon_cfb8_bmove);
-EXPORT_SYMBOL(fbcon_cfb8_clear);
-EXPORT_SYMBOL(fbcon_cfb8_putc);
-EXPORT_SYMBOL(fbcon_cfb8_putcs);
-EXPORT_SYMBOL(fbcon_cfb8_revc);
-EXPORT_SYMBOL(fbcon_cfb8_clear_margins);
diff --git a/drivers/video/fbcon-mfb.c b/drivers/video/fbcon-mfb.c
deleted file mode 100644
index 21b7b3ddaba7d36f2e87b80e06da2d092973539e..0000000000000000000000000000000000000000
--- a/drivers/video/fbcon-mfb.c
+++ /dev/null
@@ -1,217 +0,0 @@
-/*
- *  linux/drivers/video/mfb.c -- Low level frame buffer operations for
- *				 monochrome
- *
- *	Created 5 Apr 1997 by Geert Uytterhoeven
- *
- *  This file is subject to the terms and conditions of the GNU General Public
- *  License.  See the file COPYING in the main directory of this archive for
- *  more details.
- */
-
-#include <linux/module.h>
-#include <linux/tty.h>
-#include <linux/console.h>
-#include <linux/string.h>
-#include <linux/fb.h>
-
-#include <video/fbcon.h>
-#include <video/fbcon-mfb.h>
-
-
-    /*
-     *  Monochrome
-     */
-
-void fbcon_mfb_setup(struct display *p)
-{
-    if (p->fb_info->fix.line_length)
-	p->next_line = p->fb_info->fix.line_length;
-    else
-	p->next_line = p->var.xres_virtual>>3;
-    p->next_plane = 0;
-}
-
-void fbcon_mfb_bmove(struct display *p, int sy, int sx, int dy, int dx,
-		     int height, int width)
-{
-    u8 *src, *dest;
-    u_int rows;
-
-    if (sx == 0 && dx == 0 && width == p->next_line) {
-	src = p->fb_info->screen_base+sy*fontheight(p)*width;
-	dest = p->fb_info->screen_base+dy*fontheight(p)*width;
-	fb_memmove(dest, src, height*fontheight(p)*width);
-    } else if (dy <= sy) {
-	src = p->fb_info->screen_base+sy*fontheight(p)*p->next_line+sx;
-	dest = p->fb_info->screen_base+dy*fontheight(p)*p->next_line+dx;
-	for (rows = height*fontheight(p); rows--;) {
-	    fb_memmove(dest, src, width);
-	    src += p->next_line;
-	    dest += p->next_line;
-	}
-    } else {
-	src = p->fb_info->screen_base+((sy+height)*fontheight(p)-1)*p->next_line+sx;
-	dest = p->fb_info->screen_base+((dy+height)*fontheight(p)-1)*p->next_line+dx;
-	for (rows = height*fontheight(p); rows--;) {
-	    fb_memmove(dest, src, width);
-	    src -= p->next_line;
-	    dest -= p->next_line;
-	}
-    }
-}
-
-void fbcon_mfb_clear(struct vc_data *conp, struct display *p, int sy, int sx,
-		     int height, int width)
-{
-    u8 *dest;
-    u_int rows;
-    int inverse = conp ? attr_reverse(p,conp->vc_video_erase_char) : 0;
-
-    dest = p->fb_info->screen_base+sy*fontheight(p)*p->next_line+sx;
-
-    if (sx == 0 && width == p->next_line) {
-	if (inverse)
-	    fb_memset255(dest, height*fontheight(p)*width);
-	else
-	    fb_memclear(dest, height*fontheight(p)*width);
-    } else
-	for (rows = height*fontheight(p); rows--; dest += p->next_line)
-	    if (inverse)
-		fb_memset255(dest, width);
-	    else
-		fb_memclear_small(dest, width);
-}
-
-void fbcon_mfb_putc(struct vc_data *conp, struct display *p, int c, int yy,
-		    int xx)
-{
-    u8 *dest, *cdat;
-    u_int rows, bold, revs, underl;
-    u8 d;
-
-    dest = p->fb_info->screen_base+yy*fontheight(p)*p->next_line+xx;
-    cdat = p->fontdata+(c&p->charmask)*fontheight(p);
-    bold = attr_bold(p,c);
-    revs = attr_reverse(p,c);
-    underl = attr_underline(p,c);
-
-    for (rows = fontheight(p); rows--; dest += p->next_line) {
-	d = *cdat++;
-	if (underl && !rows)
-	    d = 0xff;
-	else if (bold)
-	    d |= d>>1;
-	if (revs)
-	    d = ~d;
-    	fb_writeb (d, dest);
-    }
-}
-
-void fbcon_mfb_putcs(struct vc_data *conp, struct display *p, 
-		     const unsigned short *s, int count, int yy, int xx)
-{
-    u8 *dest, *dest0, *cdat;
-    u_int rows, bold, revs, underl;
-    u8 d;
-    u16 c;
-
-    dest0 = p->fb_info->screen_base+yy*fontheight(p)*p->next_line+xx;
-    c = scr_readw(s);
-    bold = attr_bold(p, c);
-    revs = attr_reverse(p, c);
-    underl = attr_underline(p, c);
-
-    while (count--) {
-	c = scr_readw(s++) & p->charmask;
-	dest = dest0++;
-	cdat = p->fontdata+c*fontheight(p);
-	for (rows = fontheight(p); rows--; dest += p->next_line) {
-	    d = *cdat++;
-	    if (underl && !rows)
-		d = 0xff;
-	    else if (bold)
-		d |= d>>1;
-	    if (revs)
-		d = ~d;
-    	    fb_writeb (d, dest);
-	}
-    }
-}
-
-void fbcon_mfb_revc(struct display *p, int xx, int yy)
-{
-    u8 *dest, d;
-    u_int rows;
-
-    dest = p->fb_info->screen_base+yy*fontheight(p)*p->next_line+xx;
-    for (rows = fontheight(p); rows--; dest += p->next_line) {
-    	d = fb_readb(dest);
-	fb_writeb (~d, dest);
-    }
-}
-
-void fbcon_mfb_clear_margins(struct vc_data *conp, struct display *p,
-			     int bottom_only)
-{
-    u8 *dest;
-    int height, bottom;
-    int inverse = conp ? attr_reverse(p,conp->vc_video_erase_char) : 0;
-
-    /* XXX Need to handle right margin? */
-
-    height = p->var.yres - conp->vc_rows * fontheight(p);
-    if (!height)
-	return;
-    bottom = conp->vc_rows + p->yscroll;
-    if (bottom >= p->vrows)
-	bottom -= p->vrows;
-    dest = p->fb_info->screen_base + bottom * fontheight(p) * p->next_line;
-    if (inverse)
-	fb_memset255(dest, height * p->next_line);
-    else
-	fb_memclear(dest, height * p->next_line);
-}
-
-
-    /*
-     *  `switch' for the low level operations
-     */
-
-struct display_switch fbcon_mfb = {
-    setup:		fbcon_mfb_setup,
-    bmove:		fbcon_mfb_bmove,
-    clear:		fbcon_mfb_clear,
-    putc:		fbcon_mfb_putc,
-    putcs:		fbcon_mfb_putcs,
-    revc:		fbcon_mfb_revc,
-    clear_margins:	fbcon_mfb_clear_margins,
-    fontwidthmask:	FONTWIDTH(8)
-};
-
-
-#ifdef MODULE
-MODULE_LICENSE("GPL");
-
-int init_module(void)
-{
-    return 0;
-}
-
-void cleanup_module(void)
-{}
-#endif /* MODULE */
-
-
-    /*
-     *  Visible symbols for modules
-     */
-
-EXPORT_SYMBOL(fbcon_mfb);
-EXPORT_SYMBOL(fbcon_mfb_setup);
-EXPORT_SYMBOL(fbcon_mfb_bmove);
-EXPORT_SYMBOL(fbcon_mfb_clear);
-EXPORT_SYMBOL(fbcon_mfb_putc);
-EXPORT_SYMBOL(fbcon_mfb_putcs);
-EXPORT_SYMBOL(fbcon_mfb_revc);
-EXPORT_SYMBOL(fbcon_mfb_clear_margins);
diff --git a/drivers/video/fbcon.c b/drivers/video/fbcon.c
index e6916fa97b85a06db9136a29eb7cf4cfcdb31c60..e390219c82c6ce6c4ae213dbd5cb536d2227d5a7 100644
--- a/drivers/video/fbcon.c
+++ b/drivers/video/fbcon.c
@@ -100,7 +100,9 @@
 #include <asm/linux_logo.h>
 
 #include <video/fbcon.h>
-#include <video/fbcon-mac.h>	/* for 6x11 font on mac */
+#ifdef CONFIG_FBCON_ACCEL
+#include "fbcon-accel.h"
+#endif
 #include <video/font.h>
 
 #ifdef FBCONDEBUG
@@ -277,6 +279,41 @@ int PROC_CONSOLE(const struct fb_info *info)
         return minor(current->tty->device) - 1;
 }
 
+void gen_set_disp(int con, struct fb_info *info)
+{
+        struct display *display = fb_display + con;
+
+        if (info->fix.visual == FB_VISUAL_PSEUDOCOLOR ||
+            info->fix.visual == FB_VISUAL_DIRECTCOLOR) {
+                display->can_soft_blank = info->fbops->fb_blank ? 1 : 0;
+                display->dispsw_data = NULL;
+        } else {
+                display->can_soft_blank = 0;
+                display->dispsw_data = info->pseudo_palette;
+        }
+
+        /*
+         * If we are setting all the virtual consoles, also set
+         * the defaults used to create new consoles.
+         *
+        if (con < 0 || info->var.activate & FB_ACTIVATE_ALL) {
+                int unit;
+
+                for (unit = 0; unit < MAX_NR_CONSOLES; unit++)
+        		if (fb_display[unit].conp && con2fb_map[unit] == GET_FB_IDX(info->node))
+                                fb_display[unit].var = info->var;
+        }
+        */
+
+#ifdef FBCON_HAS_ACCEL
+        display->scrollmode = SCROLL_YNOMOVE;
+        display->dispsw = &fbcon_accel;
+#else
+        display->dispsw = &fbcon_dummy;
+#endif
+        fbcon_changevar(con);
+        return;
+}
 
 /**
  *	set_all_vcs - set all virtual consoles to match
@@ -300,11 +337,14 @@ int set_all_vcs(int fbidx, struct fb_ops *fb, struct fb_var_screeninfo *var,
     var->activate |= FB_ACTIVATE_TEST;
     err = fb->fb_set_var(var, PROC_CONSOLE(info), info);
     var->activate &= ~FB_ACTIVATE_TEST;
+    gen_set_disp(PROC_CONSOLE(info), info);	
     if (err)
             return err;
     for (unit = 0; unit < MAX_NR_CONSOLES; unit++)
-            if (fb_display[unit].conp && con2fb_map[unit] == fbidx)
+            if (fb_display[unit].conp && con2fb_map[unit] == fbidx) {
                     fb->fb_set_var(var, unit, info);
+		    gen_set_disp(unit, info);
+	    }	
     return 0;
 }
 
@@ -350,7 +390,7 @@ void set_con2fb_map(int unit, int newidx)
        fontheightlog = fb_display[unit]._fontheightlog;
        userfont = fb_display[unit].userfont;
        con2fb_map[unit] = newidx;
-       fb_display[unit] = *(newfb->disp);
+
        fb_display[unit].conp = conp;
        fb_display[unit].fontdata = fontdata;
        fb_display[unit]._fontwidth = fontwidth;
@@ -359,15 +399,13 @@ void set_con2fb_map(int unit, int newidx)
        fb_display[unit]._fontheightlog = fontheightlog;
        fb_display[unit].userfont = userfont;
        fb_display[unit].fb_info = newfb;
+       gen_set_disp(unit, newfb);
        if (conp)
 	   conp->vc_display_fg = &newfb->display_fg;
        if (!newfb->display_fg)
 	   newfb->display_fg = conp;
-       if (!newfb->changevar)
-           newfb->changevar = oldfb->changevar;
        /* tell console var has changed */
-       if (newfb->changevar)
-           newfb->changevar(unit);
+       fbcon_changevar(unit);
    }
 }
 
@@ -474,21 +512,15 @@ static void fbcon_init(struct vc_data *conp, int init)
     /* on which frame buffer will we open this console? */
     info = registered_fb[(int)con2fb_map[unit]];
 
-    info->changevar = &fbcon_changevar;
-    fb_display[unit] = *(info->disp);	/* copy from default */
+    gen_set_disp(unit, info);	
     DPRINTK("mode:   %s\n",info->modename);
-    DPRINTK("visual: %d\n",fb_display[unit].visual);
+    DPRINTK("visual: %d\n",info->fix.visual);
     DPRINTK("res:    %dx%d-%d\n",fb_display[unit].var.xres,
 	                     fb_display[unit].var.yres,
 	                     fb_display[unit].var.bits_per_pixel);
     fb_display[unit].conp = conp;
     fb_display[unit].fb_info = info;
     /* clear out the cmap so we don't have dangling pointers */
-    fb_display[unit].cmap.len = 0;
-    fb_display[unit].cmap.red = 0;
-    fb_display[unit].cmap.green = 0;
-    fb_display[unit].cmap.blue = 0;
-    fb_display[unit].cmap.transp = 0;
     fbcon_setup(unit, init, !init);
     /* Must be done after fbcon_setup to prevent excess updates */
     conp->vc_display_fg = &info->display_fg;
@@ -527,7 +559,7 @@ static __inline__ void updatescrollmode(struct display *p)
 	divides(fontheight(p), info->var.yres_virtual))
 	m = __SCROLL_YWRAP;
     else if (divides(info->fix.ypanstep, fontheight(p)) &&
-	     p->var.yres_virtual >= p->var.yres+fontheight(p))
+	     info->var.yres_virtual >= info->var.yres+fontheight(p))
 	m = __SCROLL_YPAN;
     else if (p->scrollmode & __SCROLL_YNOMOVE)
     	m = __SCROLL_YREDRAW;
@@ -567,7 +599,7 @@ static void fbcon_setup(int con, int init, int logo)
         info->fix.type == FB_TYPE_TEXT)
     	logo = 0;
 
-    p->var.xoffset = p->var.yoffset = p->yscroll = 0;  /* reset wrap/pan */
+    info->var.xoffset = info->var.yoffset = p->yscroll = 0;  /* reset wrap/pan */
 
     if (con == fg_console && info->fix.type != FB_TYPE_TEXT) {   
 	if (fbcon_softback_size) {
@@ -591,7 +623,7 @@ static void fbcon_setup(int con, int init, int logo)
     }
     
     for (i = 0; i < MAX_NR_CONSOLES; i++)
-    	if (i != con && fb_display[i].fb_info == p->fb_info &&
+    	if (i != con && fb_display[i].fb_info == info &&
     	    fb_display[i].conp && fb_display[i].fontdata)
     		break;
 
@@ -617,9 +649,9 @@ static void fbcon_setup(int con, int init, int logo)
     }
 
     if (!p->fontdata) {
-        if (!p->fb_info->fontname[0] ||
-	    !(font = fbcon_find_font(p->fb_info->fontname)))
-	        font = fbcon_get_default_font(p->var.xres, p->var.yres);
+        if (!info->fontname[0] ||
+	    !(font = fbcon_find_font(info->fontname)))
+	        font = fbcon_get_default_font(info->var.xres, info->var.yres);
         p->_fontwidth = font->width;
         p->_fontheight = font->height;
         p->fontdata = font->data;
@@ -627,17 +659,9 @@ static void fbcon_setup(int con, int init, int logo)
     }
     
     if (!fontwidthvalid(p,fontwidth(p))) {
-#ifdef CONFIG_FBCON_MAC
-	if (MACH_IS_MAC)
-	    /* ++Geert: hack to make 6x11 fonts work on mac */
-	    p->dispsw = &fbcon_mac;
-	else
-#endif
-	{
-	    /* ++Geert: changed from panic() to `correct and continue' */
-	    printk(KERN_ERR "fbcon_setup: No support for fontwidth %d\n", fontwidth(p));
-	    p->dispsw = &fbcon_dummy;
-	}
+	/* ++Geert: changed from panic() to `correct and continue' */
+	printk(KERN_ERR "fbcon_setup: No support for fontwidth %d\n", fontwidth(p));
+	p->dispsw = &fbcon_dummy;
     }
     if (p->dispsw->set_font)
     	p->dispsw->set_font(p, fontwidth(p), fontheight(p));
@@ -646,8 +670,8 @@ static void fbcon_setup(int con, int init, int logo)
     old_cols = conp->vc_cols;
     old_rows = conp->vc_rows;
     
-    nr_cols = p->var.xres/fontwidth(p);
-    nr_rows = p->var.yres/fontheight(p);
+    nr_cols = info->var.xres/fontwidth(p);
+    nr_rows = info->var.yres/fontheight(p);
     
     if (logo) {
     	/* Need to make room for the logo */
@@ -697,11 +721,11 @@ static void fbcon_setup(int con, int init, int logo)
 	conp->vc_cols = nr_cols;
 	conp->vc_rows = nr_rows;
     }
-    p->vrows = p->var.yres_virtual/fontheight(p);
-    if ((p->var.yres % fontheight(p)) &&
-	(p->var.yres_virtual % fontheight(p) < p->var.yres % fontheight(p)))
+    p->vrows = info->var.yres_virtual/fontheight(p);
+    if ((info->var.yres % fontheight(p)) &&
+	(info->var.yres_virtual % fontheight(p) < info->var.yres % fontheight(p)))
 	p->vrows--;
-    conp->vc_can_do_color = p->var.bits_per_pixel != 1;
+    conp->vc_can_do_color = info->var.bits_per_pixel != 1;
     conp->vc_complement_mask = conp->vc_can_do_color ? 0x7700 : 0x0800;
     if (charcnt == 256) {
     	conp->vc_hi_font_mask = 0;
@@ -720,10 +744,10 @@ static void fbcon_setup(int con, int init, int logo)
     if (p->dispsw == &fbcon_dummy)
 	printk(KERN_WARNING "fbcon_setup: type %d (aux %d, depth %d) not "
 	       "supported\n", info->fix.type, info->fix.type_aux, 
-		p->var.bits_per_pixel);
+		info->var.bits_per_pixel);
     p->dispsw->setup(p);
 
-    p->fgcol = p->var.bits_per_pixel > 2 ? 7 : (1<<p->var.bits_per_pixel)-1;
+    p->fgcol = info->var.bits_per_pixel > 2 ? 7 : (1<<info->var.bits_per_pixel)-1;
     p->bgcol = 0;
 
     if (!init) {
@@ -743,11 +767,16 @@ static void fbcon_setup(int con, int init, int logo)
     	    kfree(save);
 	}
     }
-	
-    if (logo) {
-	logo_shown = -2;
-    	conp->vc_top = logo_lines;
-    }
+
+    if (logo) {	 
+	if (logo_lines > conp->vc_bottom) {
+		logo_shown = -1;
+		printk(KERN_INFO "fbcon_startup: disable boot-logo (boot-logo bigger than screen).\n");
+	} else {
+		logo_shown = -2;
+		conp->vc_top = logo_lines;
+	}
+    }		
     
     if (con == fg_console && softback_buf) {
     	int l = fbcon_softback_size / conp->vc_size_row;
@@ -954,50 +983,54 @@ static int scrollback_current = 0;
 static __inline__ void ywrap_up(int unit, struct vc_data *conp,
 				struct display *p, int count)
 {
+    struct fb_info *info = p->fb_info;	
+
     p->yscroll += count;
     if (p->yscroll >= p->vrows)	/* Deal with wrap */
 	p->yscroll -= p->vrows;
-    p->var.xoffset = 0;
-    p->var.yoffset = p->yscroll*fontheight(p);
-    p->var.vmode |= FB_VMODE_YWRAP;
-    p->fb_info->updatevar(unit, p->fb_info);
+    info->var.xoffset = 0;
+    info->var.yoffset = p->yscroll*fontheight(p);
+    info->var.vmode |= FB_VMODE_YWRAP;
+    info->updatevar(unit, info);
     scrollback_max += count;
     if (scrollback_max > scrollback_phys_max)
 	scrollback_max = scrollback_phys_max;
     scrollback_current = 0;
 }
 
-
 static __inline__ void ywrap_down(int unit, struct vc_data *conp,
 				  struct display *p, int count)
 {
+    struct fb_info *info = p->fb_info;	
+
     p->yscroll -= count;
     if (p->yscroll < 0)		/* Deal with wrap */
 	p->yscroll += p->vrows;
-    p->var.xoffset = 0;
-    p->var.yoffset = p->yscroll*fontheight(p);
-    p->var.vmode |= FB_VMODE_YWRAP;
-    p->fb_info->updatevar(unit, p->fb_info);
+    info->var.xoffset = 0;
+    info->var.yoffset = p->yscroll*fontheight(p);
+    info->var.vmode |= FB_VMODE_YWRAP;
+    info->updatevar(unit, info);
     scrollback_max -= count;
     if (scrollback_max < 0)
 	scrollback_max = 0;
     scrollback_current = 0;
 }
 
-
 static __inline__ void ypan_up(int unit, struct vc_data *conp,
 			       struct display *p, int count)
 {
+    struct fb_info *info = p->fb_info;	
+
     p->yscroll += count;
     if (p->yscroll > p->vrows-conp->vc_rows) {
 	p->dispsw->bmove(p, p->vrows-conp->vc_rows, 0, 0, 0,
 			 conp->vc_rows, conp->vc_cols);
 	p->yscroll -= p->vrows-conp->vc_rows;
     }
-    p->var.xoffset = 0;
-    p->var.yoffset = p->yscroll*fontheight(p);
-    p->var.vmode &= ~FB_VMODE_YWRAP;
-    p->fb_info->updatevar(unit, p->fb_info);
+    info->var.xoffset = 0;
+    info->var.yoffset = p->yscroll*fontheight(p);
+    info->var.vmode &= ~FB_VMODE_YWRAP;
+    info->updatevar(unit, info);
     if (p->dispsw->clear_margins)
 	p->dispsw->clear_margins(conp, p, 1);
     scrollback_max += count;
@@ -1010,16 +1043,18 @@ static __inline__ void ypan_up(int unit, struct vc_data *conp,
 static __inline__ void ypan_down(int unit, struct vc_data *conp,
 				 struct display *p, int count)
 {
+    struct fb_info *info = p->fb_info;	
+
     p->yscroll -= count;
     if (p->yscroll < 0) {
 	p->dispsw->bmove(p, 0, 0, p->vrows-conp->vc_rows, 0,
 			 conp->vc_rows, conp->vc_cols);
 	p->yscroll += p->vrows-conp->vc_rows;
     }
-    p->var.xoffset = 0;
-    p->var.yoffset = p->yscroll*fontheight(p);
-    p->var.vmode &= ~FB_VMODE_YWRAP;
-    p->fb_info->updatevar(unit, p->fb_info);
+    info->var.xoffset = 0;
+    info->var.yoffset = p->yscroll*fontheight(p);
+    info->var.vmode &= ~FB_VMODE_YWRAP;
+    info->updatevar(unit, info);
     if (p->dispsw->clear_margins)
 	p->dispsw->clear_margins(conp, p, 1);
     scrollback_max -= count;
@@ -1522,7 +1557,8 @@ static int fbcon_switch(struct vc_data *conp)
     		conp2->vc_top = 0;
     	logo_shown = -1;
     }
-    p->var.yoffset = p->yscroll = 0;
+    if (info)	
+    	info->var.yoffset = p->yscroll = 0;
     switch (p->scrollmode & __SCROLL_YMASK) {
 	case __SCROLL_YWRAP:
 	    scrollback_phys_max = p->vrows-conp->vc_rows;
@@ -1539,8 +1575,6 @@ static int fbcon_switch(struct vc_data *conp)
     scrollback_max = 0;
     scrollback_current = 0;
 
-    if (info && info->switch_con)
-	(*info->switch_con)(unit, info);
     if (p->dispsw->clear_margins && vt_cons[unit]->vc_mode == KD_TEXT)
 	p->dispsw->clear_margins(conp, p, 0);
     if (logo_shown == -2) {
@@ -1570,8 +1604,8 @@ static int fbcon_blank(struct vc_data *conp, int blank)
 	    if (info->fix.visual == FB_VISUAL_MONO01) {
 		if (info->screen_base)
 		    fb_memset255(info->screen_base,
-				 p->var.xres_virtual*p->var.yres_virtual*
-				 p->var.bits_per_pixel>>3);
+				 info->var.xres_virtual*info->var.yres_virtual*
+				 info->var.bits_per_pixel>>3);
 	    } else {
 	    	unsigned short oldc;
 	    	u_int height;
@@ -1668,6 +1702,7 @@ static inline int fbcon_get_font(int unit, struct console_font_op *op)
 static int fbcon_do_set_font(int unit, struct console_font_op *op, u8 *data, int userfont)
 {
     struct display *p = &fb_display[unit];
+    struct fb_info *info = p->fb_info;
     int resize;
     int w = op->width;
     int h = op->height;
@@ -1755,12 +1790,12 @@ static int fbcon_do_set_font(int unit, struct console_font_op *op, u8 *data, int
     if (resize) {
     	struct vc_data *conp = p->conp;
 	/* reset wrap/pan */
-	p->var.xoffset = p->var.yoffset = p->yscroll = 0;
-	p->vrows = p->var.yres_virtual/h;
-	if ((p->var.yres % h) && (p->var.yres_virtual % h < p->var.yres % h))
+	info->var.xoffset = info->var.yoffset = p->yscroll = 0;
+	p->vrows = info->var.yres_virtual/h;
+	if ((info->var.yres % h) && (info->var.yres_virtual % h < info->var.yres % h))
 	    p->vrows--;
 	updatescrollmode(p);
-	vc_resize_con( p->var.yres/h, p->var.xres/w, unit );
+	vc_resize_con( info->var.yres/h, info->var.xres/w, unit );
         if (CON_IS_VISIBLE(conp) && softback_buf) {
 	    int l = fbcon_softback_size / conp->vc_size_row;
 	    if (l > 5)
@@ -1892,9 +1927,10 @@ static inline int fbcon_set_def_font(int unit, struct console_font_op *op)
     char name[MAX_FONT_NAME];
     struct fbcon_font_desc *f;
     struct display *p = &fb_display[unit];
+    struct fb_info *info = p->fb_info;	
 
     if (!op->data)
-	f = fbcon_get_default_font(p->var.xres, p->var.yres);
+	f = fbcon_get_default_font(info->var.xres, info->var.yres);
     else if (strncpy_from_user(name, op->data, MAX_FONT_NAME-1) < 0)
 	return -EFAULT;
     else {
@@ -1937,6 +1973,7 @@ static int fbcon_set_palette(struct vc_data *conp, unsigned char *table)
 {
     int unit = conp->vc_num;
     struct display *p = &fb_display[unit];
+    struct fb_info *info = p->fb_info;	
     int i, j, k;
     u8 val;
 
@@ -1951,12 +1988,12 @@ static int fbcon_set_palette(struct vc_data *conp, unsigned char *table)
 	val = conp->vc_palette[j++];
 	palette_blue[k] = (val<<8)|val;
     }
-    if (p->var.bits_per_pixel <= 4)
-	palette_cmap.len = 1<<p->var.bits_per_pixel;
+    if (info->var.bits_per_pixel <= 4)
+	palette_cmap.len = 1 << info->var.bits_per_pixel;
     else
 	palette_cmap.len = 16;
     palette_cmap.start = 0;
-    return p->fb_info->fbops->fb_set_cmap(&palette_cmap, 1, unit, p->fb_info);
+    return fb_set_cmap(&palette_cmap, 1, info);
 }
 
 static u16 *fbcon_screen_pos(struct vc_data *conp, int offset)
@@ -2033,10 +2070,13 @@ static void fbcon_invert_region(struct vc_data *conp, u16 *p, int cnt)
 static int fbcon_scrolldelta(struct vc_data *conp, int lines)
 {
     int unit, offset, limit, scrollback_old;
+    struct fb_info *info;	   
     struct display *p;
-    
+ 
     unit = fg_console;
     p = &fb_display[unit];
+    info = p->fb_info;
+	
     if (softback_top) {
     	if (conp->vc_num != unit)
     	    return 0;
@@ -2092,20 +2132,20 @@ static int fbcon_scrolldelta(struct vc_data *conp, int lines)
     limit = p->vrows;
     switch (p->scrollmode && __SCROLL_YMASK) {
 	case __SCROLL_YWRAP:
-	    p->var.vmode |= FB_VMODE_YWRAP;
+	    info->var.vmode |= FB_VMODE_YWRAP;
 	    break;
 	case __SCROLL_YPAN:
 	    limit -= conp->vc_rows;
-	    p->var.vmode &= ~FB_VMODE_YWRAP;
+	    info->var.vmode &= ~FB_VMODE_YWRAP;
 	    break;
     }
     if (offset < 0)
 	offset += limit;
     else if (offset >= limit)
 	offset -= limit;
-    p->var.xoffset = 0;
-    p->var.yoffset = offset*fontheight(p);
-    p->fb_info->updatevar(unit, p->fb_info);
+    info->var.xoffset = 0;
+    info->var.yoffset = offset*fontheight(p);
+    info->updatevar(unit, info);
     if (!scrollback_current)
 	fbcon_cursor(conp, CM_DRAW);
     return 0;
@@ -2127,7 +2167,11 @@ static int __init fbcon_show_logo( void )
 {
     struct display *p = &fb_display[fg_console]; /* draw to vt in foreground */
     struct fb_info *info = p->fb_info;
-    int depth = p->var.bits_per_pixel;
+#ifdef CONFIG_FBCON_ACCEL    
+    struct fb_image image;
+    u32 *palette = NULL, *saved_palette = NULL;
+#endif
+    int depth = info->var.bits_per_pixel;
     int line = p->next_line;
     unsigned char *fb = info->screen_base;
     unsigned char *logo;
@@ -2162,7 +2206,7 @@ static int __init fbcon_show_logo( void )
 		palette_cmap.blue[j]  = (linux_logo_blue[i+j] << 8) |
 					linux_logo_blue[i+j];
 	    }
-	    info->fbops->fb_set_cmap(&palette_cmap, 1, fg_console, info);
+	    fb_set_cmap(&palette_cmap, 1, info);
 	}
 	
     if (depth >= 8) {
@@ -2177,13 +2221,54 @@ static int __init fbcon_show_logo( void )
 	logo = linux_logo_bw;
 	logo_depth = 1;
     }
-    
+   
+#if defined(CONFIG_FBCON_ACCEL)
+	if (info->fix.visual == FB_VISUAL_TRUECOLOR) {
+		unsigned char mask[9] = { 0,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff };
+		unsigned char redmask, greenmask, bluemask;
+		int redshift, greenshift, blueshift;
+
+		/* Bug: Doesn't obey msb_right ... (who needs that?) */
+		redmask   = mask[info->var.red.length   < 8 ? info->var.red.length   : 8];
+		greenmask = mask[info->var.green.length < 8 ? info->var.green.length : 8];
+		bluemask  = mask[info->var.blue.length  < 8 ? info->var.blue.length  : 8];
+		redshift   = info->var.red.offset   - (8 - info->var.red.length);
+		greenshift = info->var.green.offset - (8 - info->var.green.length);
+		blueshift  = info->var.blue.offset  - (8 - info->var.blue.length);
+
+		/*
+	 	 * We have to create a temporary palette since console palette is only
+		 * 16 colors long.
+	 	 */
+		palette = kmalloc(256 * 4, GFP_KERNEL);
+		if (palette == NULL)
+			return (LOGO_H + fontheight(p) - 1) / fontheight(p);
+
+		for ( i = 0; i < LINUX_LOGO_COLORS; i++) {
+			palette[i+32] = (safe_shift((linux_logo_red[i]   & redmask), redshift) |
+					safe_shift((linux_logo_green[i] & greenmask), greenshift) |
+					safe_shift((linux_logo_blue[i]  & bluemask), blueshift));
+		}
+		saved_palette = info->pseudo_palette;
+		info->pseudo_palette = palette;
+		image.width = LOGO_W;
+		image.height = LOGO_H;
+		image.depth = depth;
+		image.data = logo;
+		image.dy = 0;
+	}
+#endif
+ 
     if (info->fbops->fb_rasterimg)
     	info->fbops->fb_rasterimg(info, 1);
 
     for (x = 0; x < num_online_cpus() * (LOGO_W + 8) &&
-    	 x < p->var.xres - (LOGO_W + 8); x += (LOGO_W + 8)) {
-    	 
+    	 x < info->var.xres - (LOGO_W + 8); x += (LOGO_W + 8)) {
+#if defined (CONFIG_FBCON_ACCEL)
+	image.dx = x;
+	info->fbops->fb_imageblit(info, &image);
+	done = 1;
+#else    	 
 #if defined(CONFIG_FBCON_CFB16) || defined(CONFIG_FBCON_CFB24) || \
     defined(CONFIG_FBCON_CFB32) || defined(CONFIG_FB_SBUS)
         if (info->fix.visual == FB_VISUAL_DIRECTCOLOR) {
@@ -2192,9 +2277,9 @@ static int __init fbcon_show_logo( void )
 	    int redshift, greenshift, blueshift;
 		
 	    /* Bug: Doesn't obey msb_right ... (who needs that?) */
-	    redshift   = p->var.red.offset;
-	    greenshift = p->var.green.offset;
-	    blueshift  = p->var.blue.offset;
+	    redshift   = info->var.red.offset;
+	    greenshift = info->var.green.offset;
+	    blueshift  = info->var.blue.offset;
 
 	    if (depth >= 24 && (depth % 8) == 0) {
 		/* have at least 8 bits per color */
@@ -2270,12 +2355,12 @@ static int __init fbcon_show_logo( void )
 	    int redshift, greenshift, blueshift;
 		
 	    /* Bug: Doesn't obey msb_right ... (who needs that?) */
-	    redmask   = mask[p->var.red.length   < 8 ? p->var.red.length   : 8];
-	    greenmask = mask[p->var.green.length < 8 ? p->var.green.length : 8];
-	    bluemask  = mask[p->var.blue.length  < 8 ? p->var.blue.length  : 8];
-	    redshift   = p->var.red.offset   - (8-p->var.red.length);
-	    greenshift = p->var.green.offset - (8-p->var.green.length);
-	    blueshift  = p->var.blue.offset  - (8-p->var.blue.length);
+	    redmask   = mask[info->var.red.length   < 8 ? info->var.red.length   : 8];
+	    greenmask = mask[info->var.green.length < 8 ? info->var.green.length : 8];
+	    bluemask  = mask[info->var.blue.length  < 8 ? info->var.blue.length  : 8];
+	    redshift   = info->var.red.offset   - (8 - info->var.red.length);
+	    greenshift = info->var.green.offset - (8 - info->var.green.length);
+	    blueshift  = info->var.blue.offset  - (8 - info->var.blue.length);
 
 	    src = logo;
 	    for( y1 = 0; y1 < LOGO_H; y1++ ) {
@@ -2396,7 +2481,7 @@ static int __init fbcon_show_logo( void )
 	    unsigned char inverse = p->inverse || info->fix.visual == FB_VISUAL_MONO01
 		? 0x00 : 0xff;
 
-	    int is_hga = !strncmp(p->fb_info->modename, "HGA", 3);
+	    int is_hga = !strncmp(info->modename, "HGA", 3);
 	    /* can't use simply memcpy because need to apply inverse */
 	    for( y1 = 0; y1 < LOGO_H; y1++ ) {
 		src = logo + y1*LOGO_LINE;
@@ -2440,12 +2525,19 @@ static int __init fbcon_show_logo( void )
 		}
 		done = 1;
 	}
-#endif			
+#endif
+#endif	/* CONFIG_FBCON_ACCEL */		
     }
-    
-    if (p->fb_info->fbops->fb_rasterimg)
-    	p->fb_info->fbops->fb_rasterimg(p->fb_info, 0);
+   
+    if (info->fbops->fb_rasterimg)
+    	info->fbops->fb_rasterimg(info, 0);
 
+#if defined (CONFIG_FBCON_ACCEL)
+	if (palette != NULL)
+		kfree(palette);
+	if (saved_palette != NULL)
+		info->pseudo_palette = saved_palette;
+#endif
     /* Modes not yet supported: packed pixels with depth != 8 (does such a
      * thing exist in reality?) */
 
diff --git a/drivers/video/fbgen.c b/drivers/video/fbgen.c
index e13783ed31d872f4b853b3cf5939b8cbb2eb280e..9ef1725e715887b043ec903b2fe5d64159a2cf43 100644
--- a/drivers/video/fbgen.c
+++ b/drivers/video/fbgen.c
@@ -21,14 +21,6 @@
 #include <asm/io.h>
 
 #include <video/fbcon.h>
-#include <video/fbcon-mfb.h>
-#include <video/fbcon-cfb2.h>
-#include <video/fbcon-cfb4.h>
-#include <video/fbcon-cfb8.h>
-#include <video/fbcon-cfb16.h>
-#include <video/fbcon-cfb24.h>
-#include <video/fbcon-cfb32.h>
-#include "fbcon-accel.h"
 
 int gen_set_var(struct fb_var_screeninfo *var, int con, struct fb_info *info)
 {
@@ -52,49 +44,13 @@ int gen_set_var(struct fb_var_screeninfo *var, int con, struct fb_info *info)
 
 				if (info->fbops->fb_pan_display)
 					info->fbops->fb_pan_display(&info->var, con, info);
-
-				gen_set_disp(con, info);
 				fb_set_cmap(&info->cmap, 1, info);
 			}
-		
-			if (info->changevar)
-				info->changevar(con);
 		}
 	}
 	return 0;
 }
 
-int gen_get_cmap(struct fb_cmap *cmap, int kspc, int con, struct fb_info *info)
-{
-	fb_copy_cmap (&info->cmap, cmap, kspc ? 0 : 2);
-	return 0;
-}
-
-int gen_set_cmap(struct fb_cmap *cmap, int kspc, int con,
-		 struct fb_info *info)
-{
-	struct display *disp = (con < 0) ? info->disp : (fb_display + con);
-	struct fb_cmap *dcmap = &disp->cmap;
-	int err = 0;
-
-	/* No colormap allocated ? */
-	if (!dcmap->len) {
-		int size = info->cmap.len;
-
-		err = fb_alloc_cmap(dcmap, size, 0);
-	}
- 	
-
-	if (!err && con == info->currcon) {
-		err = fb_set_cmap(cmap, kspc, info);
-		dcmap = &info->cmap;
-	}
-	
-	if (!err)
-		fb_copy_cmap(cmap, dcmap, kspc ? 0 : 1);
-	return err;
-}
-
 int fbgen_pan_display(struct fb_var_screeninfo *var, int con,
 		      struct fb_info *info)
 {
@@ -125,75 +81,11 @@ int fbgen_pan_display(struct fb_var_screeninfo *var, int con,
 
 /* ---- Helper functions --------------------------------------------------- */
 
-void gen_set_disp(int con, struct fb_info *info)
-{
-	struct display *display = (con < 0) ? info->disp : (fb_display + con);
-
-	if (info->fix.visual == FB_VISUAL_PSEUDOCOLOR ||
-	    info->fix.visual == FB_VISUAL_DIRECTCOLOR) {
-		display->can_soft_blank = info->fbops->fb_blank ? 1 : 0;
-		display->dispsw_data = NULL;
-	} else {
-		display->can_soft_blank = 0;
-		display->dispsw_data = info->pseudo_palette;
-	}
-	display->var = info->var;
-
-	/*
-	 * If we are setting all the virtual consoles, also set
-	 * the defaults used to create new consoles.
-	 */
-	if (con < 0 || info->var.activate & FB_ACTIVATE_ALL)
-		info->disp->var = info->var;	
-
-	if (info->var.bits_per_pixel == 24) {
-#ifdef FBCON_HAS_CFB24
-		display->scrollmode = SCROLL_YREDRAW;		
-		display->dispsw = &fbcon_cfb24;
-		return;
-#endif
-	}
-
-#ifdef FBCON_HAS_ACCEL
-	display->scrollmode = SCROLL_YNOMOVE;
-	display->dispsw = &fbcon_accel;
-#else
-	display->dispsw = &fbcon_dummy;
-#endif
-	return;
-}
-
-/**
- *	do_install_cmap - install the current colormap
- *	@con: virtual console number
- *	@info: generic frame buffer info structure
- *
- *	Installs the current colormap for virtual console @con on
- *	device @info.
- *
- */
-
-void do_install_cmap(int con, struct fb_info *info)
-{
-    if (con != info->currcon)
-	return;
-    if (fb_display[con].cmap.len)
-	fb_set_cmap(&fb_display[con].cmap, 1, info);
-    else {
-	int size = fb_display[con].var.bits_per_pixel == 16 ? 64 : 256;
-	fb_set_cmap(fb_default_cmap(size), 1, info);
-    }
-}
-
 int gen_update_var(int con, struct fb_info *info)
 {
-	struct display *disp = (con < 0) ? info->disp : (fb_display + con);
 	int err;
     
 	if (con == info->currcon) {
-		info->var.xoffset = disp->var.xoffset;
-		info->var.yoffset = disp->var.yoffset;
-		info->var.vmode	= disp->var.vmode;	
 		if (info->fbops->fb_pan_display) {
 			if ((err = info->fbops->fb_pan_display(&info->var, con, info)))
 				return err;
@@ -202,46 +94,6 @@ int gen_update_var(int con, struct fb_info *info)
 	return 0;
 }
 
-int gen_switch(int con, struct fb_info *info)
-{
-	struct display *disp;
-	struct fb_cmap *cmap;
-	
-	if (info->currcon >= 0) {
-		disp = fb_display + info->currcon;
-	
-		/*
-		 * Save the old colormap and graphics mode.
-		 */
-		disp->var = info->var;
-		if (disp->cmap.len)
-			fb_copy_cmap(&info->cmap, &disp->cmap, 0);
-	}
-	
-	info->currcon = con;
-	disp = fb_display + con;
-	
-	/*
-	 * Install the new colormap and change the graphics mode. By default
-	 * fbcon sets all the colormaps and graphics modes to the default
-	 * values at bootup.
-	 *
-	 * Really, we want to set the colormap size depending on the
-	 * depth of the new grpahics mode. For now, we leave it as its
-	 * default 256 entry.
-	 */
-	if (disp->cmap.len)
-		cmap = &disp->cmap;
-	else
-		cmap = fb_default_cmap(1 << disp->var.bits_per_pixel);
-	
-	fb_copy_cmap(cmap, &info->cmap, 0);
-	
-	disp->var.activate = FB_ACTIVATE_NOW;
-	info->fbops->fb_set_var(&disp->var, con, info);
- 	return 0;	  	
-}
-
 /**
  *	fbgen_blank - blank the screen
  *	@blank: boolean, 0 unblank, 1 blank
@@ -267,20 +119,22 @@ int fbgen_blank(int blank, struct fb_info *info)
 	cmap.start = 0;
 	cmap.len = 16;
 	fb_set_cmap(&cmap, 1, info);
-    } else
-	do_install_cmap(info->currcon, info);
+    } else {
+    	if (info->cmap.len)
+		fb_set_cmap(&info->cmap, 1, info);
+    	else {
+		int size = info->var.bits_per_pixel == 16 ? 64 : 256;
+		fb_set_cmap(fb_default_cmap(size), 1, info);
+    	}
+    }	
     return 0;	
 }
 
 /* generic frame buffer operations */
 EXPORT_SYMBOL(gen_set_var);
-EXPORT_SYMBOL(gen_get_cmap);
-EXPORT_SYMBOL(gen_set_cmap);
 EXPORT_SYMBOL(fbgen_pan_display);
 /* helper functions */
-EXPORT_SYMBOL(do_install_cmap);
 EXPORT_SYMBOL(gen_update_var);
-EXPORT_SYMBOL(gen_switch);
 EXPORT_SYMBOL(fbgen_blank);
 
 MODULE_LICENSE("GPL");
diff --git a/drivers/video/fbmem.c b/drivers/video/fbmem.c
index c8f357a2944e506253c39111b0dd1e9e5db20a83..decb80e8522fb54963304d557a21d29af25c9580 100644
--- a/drivers/video/fbmem.c
+++ b/drivers/video/fbmem.c
@@ -481,11 +481,14 @@ fb_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
 	case FBIOPUT_VSCREENINFO:
 		if (copy_from_user(&var, (void *) arg, sizeof(var)))
 			return -EFAULT;
-		i = var.activate & FB_ACTIVATE_ALL
-			    ? set_all_vcs(fbidx, fb, &var, info)
-			    : fb->fb_set_var(&var, PROC_CONSOLE(info), info);
-		if (i)
-			return i;
+		if (var.activate & FB_ACTIVATE_ALL) {
+			i = set_all_vcs(fbidx, fb, &var, info);
+			if (i) return i;
+		} else {
+			i = fb->fb_set_var(&var, PROC_CONSOLE(info), info);
+			if (i) return i;
+			gen_set_disp(PROC_CONSOLE(info), info);
+		}
 		if (copy_to_user((void *) arg, &var, sizeof(var)))
 			return -EFAULT;
 		return 0;
@@ -494,11 +497,11 @@ fb_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
 	case FBIOPUTCMAP:
 		if (copy_from_user(&cmap, (void *) arg, sizeof(cmap)))
 			return -EFAULT;
-		return (fb->fb_set_cmap(&cmap, 0, PROC_CONSOLE(info), info));
+		return (fb_set_cmap(&cmap, 0, info));
 	case FBIOGETCMAP:
 		if (copy_from_user(&cmap, (void *) arg, sizeof(cmap)))
 			return -EFAULT;
-		return (fb->fb_get_cmap(&cmap, 0, PROC_CONSOLE(info), info));
+		fb_copy_cmap(&info->cmap, &cmap, 0);
 	case FBIOPAN_DISPLAY:
 		if (copy_from_user(&var, (void *) arg, sizeof(var)))
 			return -EFAULT;
diff --git a/drivers/video/fm2fb.c b/drivers/video/fm2fb.c
index 05ed2f341c1246a1d088586e31bd63fbedd8237f..ea922ca2c090134ce154417d3e5f6f8144c78bc0 100644
--- a/drivers/video/fm2fb.c
+++ b/drivers/video/fm2fb.c
@@ -21,8 +21,6 @@
 #include <linux/zorro.h>
 #include <asm/io.h>
 
-#include <video/fbcon.h>
-
 /*
  *	Some technical notes:
  *
@@ -133,7 +131,6 @@ static volatile unsigned char *fm2fb_reg;
 
 static struct fb_info fb_info;
 static u32 pseudo_palette[17];
-static struct display display;
 
 static struct fb_fix_screeninfo fb_fix __initdata = {
 	.smem_len =	FRAMEMASTER_REG,
@@ -177,8 +174,6 @@ static int fm2fb_blank(int blank, struct fb_info *info);
 static struct fb_ops fm2fb_ops = {
 	.owner		= THIS_MODULE,
 	.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,
@@ -264,7 +259,6 @@ int __init fm2fb_init(void)
 		if (fm2fb_mode == -1)
 			fm2fb_mode = FM2FB_MODE_PAL;
 
-		strcpy(fb_info.modename, fb_fix.id);
 		fb_info.node = NODEV;
 		fb_info.fbops = &fm2fb_ops;
 		fb_info.var = fb_var_modes[fm2fb_mode];
@@ -275,14 +269,9 @@ int __init fm2fb_init(void)
 
 		/* The below feilds will go away !!!! */
 		fb_info.currcon		= -1;
-		strcpy(fb_info.modename, fb_info.fix.id);
-		fb_info.disp		= &display;
-		fb_info.switch_con	= gen_switch;
 		fb_info.updatevar	= gen_update_var;
 		fb_alloc_cmap(&fb_info.cmap, 16, 0);
 
-		gen_set_disp(-1, &fb_info);
-
 		if (register_framebuffer(&fb_info) < 0)
 			return -EINVAL;
 
diff --git a/drivers/video/g364fb.c b/drivers/video/g364fb.c
index 6ee7d7d0fe1c6a9504d8b86ce909ac92db89399d..e9d6e222b814ef8e7af57bd394657f0c6cc69970 100644
--- a/drivers/video/g364fb.c
+++ b/drivers/video/g364fb.c
@@ -74,7 +74,6 @@
 #define MON_ID_REG 	0xe4100000	/* unused */
 #define RESET_REG 	0xe4180000	/* Write only */
 
-static struct display disp;
 static struct fb_info fb_info;
 
 static struct fb_fix_screeninfo fb_fix __initdata = {
@@ -119,8 +118,6 @@ static int g364fb_blank(int blank, struct fb_info *info);
 static struct fb_ops g364fb_ops = {
 	.owner		= THIS_MODULE,
 	.fb_set_var	= gen_set_var,
-	.fb_get_cmap	= gen_get_cmap,
-	.fb_set_cmap	= gen_set_cmap,
 	.fb_setcolreg	= g364fb_setcolreg,
 	.fb_pan_display	= g364fb_pan_display,
 	.fb_blank	= g364fb_blank,
@@ -239,7 +236,6 @@ int __init g364fb_init(void)
 	fb_fix.smem_len = (1 << (mem * 2)) * 512 * 1024;
 	fb_var.yres_virtual = fb_fix.smem_len / fb_var.xres;
 
-	strcpy(fb_info.modename, fb_fix.id);
 	fb_info.node = NODEV;
 	fb_info.fbops = &g364fb_ops;
 	fb_info.screen_base = (char *) G364_MEM_BASE;	/* virtual kernel address */
@@ -247,15 +243,10 @@ int __init g364fb_init(void)
 	fb_info.fix = fb_fix;
 	fb_info.flags = FBINFO_FLAG_DEFAULT;
 
-	fb_info.disp = &disp;
 	fb_info.currcon = -1;
 	fb_info.fontname[0] = '\0';
-	fb_info.changevar = NULL;
-	fb_info.switch_con = gen_switch;
 	fb_info.updatevar = gen_update_var;
-
 	fb_alloc_cmap(&fb_info.cmap, 255, 0);
-	gen_set_disp(-1, &fb_info);
 
 	if (register_framebuffer(&fb_info) < 0)
 		return -EINVAL;
diff --git a/drivers/video/hitfb.c b/drivers/video/hitfb.c
index a18844098a6cf6243903c3918477b958e1d9c57a..810fc3e9adb7128de0b2ac6f2f936469e5eb3e1b 100644
--- a/drivers/video/hitfb.c
+++ b/drivers/video/hitfb.c
@@ -29,8 +29,6 @@
 #include <asm/io.h>
 #include <asm/hd64461.h>
 
-#include <video/fbcon.h>
-
 static struct fb_var_screeninfo hitfb_var __initdata = {
 	.activate =	FB_ACTIVATE_NOW,
 	.height =	-1,
@@ -46,7 +44,6 @@ static struct fb_fix_screeninfo hitfb_fix __initdata = {
 };
 
 static u16 pseudo_palette[17];
-static struct display display;
 struct fb_info fb_info;
 
 static int hitfb_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
@@ -126,8 +123,6 @@ static int hitfb_setcolreg(unsigned regno, unsigned red, unsigned green,
 static struct fb_ops hitfb_ops = {
 	.owner		= THIS_MODULE,
 	.fb_set_var	= gen_set_var,
-	.fb_get_cmap	= gen_get_cmap,
-	.fb_set_cmap	= gen_set_cmap,
 	.fb_check_var	= hitfb_check_var,
 	.fb_set_par	= hitfb_set_par,
 	.fb_setcolreg	= hitfb_setcolreg,
@@ -167,11 +162,7 @@ int __init hitfb_init(void)
 	fb_info.pseudo_palette 	= pseudo_palette;	
 	fb_info.flags 		= FBINFO_FLAG_DEFAULT;
     	
-	strcpy(fb_info.modename, fb_info.fix.id);
 	fb_info.currcon = -1;
-	fb_info.disp = &display;
-	fb_info.changevar = NULL;
-	fb_info.switch_con = gen_switch;
 	fb_info.updatevar = gen_update_var;
 	fb_info.screen_base = (void *) hitfb_fix.smem_start;
 
diff --git a/drivers/video/hpfb.c b/drivers/video/hpfb.c
index 706eb0c6dc5398015a5b1e32a31835e6a61256ca..22ac50f18b7fea9fbd5e66796b7cebc451c4097d 100644
--- a/drivers/video/hpfb.c
+++ b/drivers/video/hpfb.c
@@ -19,8 +19,6 @@
 #include <asm/blinken.h>
 #include <asm/hwtest.h>
 
-#include <video/fbcon.h>
-
 static struct fb_info fb_info;
 
 unsigned long fb_regs;
@@ -67,8 +65,6 @@ static struct fb_var_screeninfo hpfb_defined = {
 	.vmode		= FB_VMODE_NONINTERLACED,
 };
 
-static struct display display;
-
 /*
  * Set the palette.  This may not work on all boards but only experimentation 
  * will tell.
@@ -106,8 +102,6 @@ void hpfb_copyarea(struct fb_info *info, struct fb_copyarea *area)
 static struct fb_ops hpfb_ops = {
 	.owner		= THIS_MODULE,
 	.fb_set_var	= gen_set_var,
-	.fb_get_cmap	= gen_get_cmap,
-	.fb_set_cmap	= gen_set_cmap,
 	.fb_setcolreg	= hpfb_setcolreg,
 	.fb_fillrect	= cfb_fillrect,
 	.fb_copyarea	= hpfb_copyarea,
@@ -166,14 +160,9 @@ int __init hpfb_init_one(unsigned long base)
 
 	/* The below feilds will go away !!!! */
 	fb_info.currcon		= -1;
-        strcpy(fb_info.modename, fb_info.fix.id);
-        fb_info.disp		= &display;
-        fb_info.switch_con	= gen_switch;
         fb_info.updatevar	= gen_update_var;
 	fb_alloc_cmap(&fb_info.cmap, 256, 0);
 
-	gen_set_disp(-1, &fb_info);
-
 	if (register_framebuffer(&fb_info) < 0)
 		return 1;
 	return 0;
diff --git a/drivers/video/macfb.c b/drivers/video/macfb.c
index 252cf713c4a2cc7322f8b3c91d9bad1421a93b42..f8e89120e587dd2df4f4d809cb366f8b5700ef83 100644
--- a/drivers/video/macfb.c
+++ b/drivers/video/macfb.c
@@ -40,8 +40,6 @@
 #include <asm/io.h>
 #include <asm/machw.h>
 
-#include <video/fbcon.h>
-
 /* Common DAC base address for the LC, RBV, Valkyrie, and IIvx */
 #define DAC_BASE 0x50f24000
 
@@ -173,7 +171,6 @@ static struct fb_fix_screeninfo macfb_fix = {
 	.accel	= FB_ACCEL_NONE,
 };
 
-static struct display disp;
 static struct fb_info fb_info;
 static u32 pseudo_palette[17];
 static int inverse   = 0;
@@ -589,8 +586,6 @@ static int macfb_setcolreg(unsigned regno, unsigned red, unsigned green,
 static struct fb_ops macfb_ops = {
 	.owner		= THIS_MODULE,
 	.fb_set_var	= gen_set_var,
-	.fb_get_cmap	= gen_get_cmap,
-	.fb_set_cmap	= gen_set_cmap,
 	.fb_setcolreg	= macfb_setcolreg,
 	.fb_fillrect	= cfb_fillrect,
 	.fb_copyarea	= cfb_copyarea,
@@ -952,21 +947,16 @@ void __init macfb_init(void)
 			break;
 		}
 
-	strcpy(fb_info.modename, macfb_fix.id);	
-	fb_info.changevar	= NULL;
 	fb_info.node		= NODEV;
 	fb_info.fbops		= &macfb_ops;
 	fb_info.var		= macfb_defined;
 	fb_info.fix		= macfb_fix;
 	fb_info.currcon		= -1;	
-	fb_info.disp		= &disp;
-	fb_info.switch_con	= gen_switch;
 	fb_info.updatevar	= gen_update_var;
 	fb_info.pseudo_palette	= pseudo_palette;
 	fb_info.flags		= FBINFO_FLAG_DEFAULT;
 
 	fb_alloc_cmap(&fb_info.cmap, video_cmap_len, 0);
-	gen_set_disp(-1, &fb_info);
 	
 	if (register_framebuffer(&fb_info) < 0)
 		return;
diff --git a/drivers/video/maxinefb.c b/drivers/video/maxinefb.c
index 6e1fd2f76347ab627f769b51985de8ceec4de2b9..d2f4c1b339d0ef9a7890372b7809ae902de3d7a9 100644
--- a/drivers/video/maxinefb.c
+++ b/drivers/video/maxinefb.c
@@ -42,7 +42,6 @@
 #include <asm/bootinfo.h>
 
 static struct fb_info fb_info;
-static struct display disp;
 
 static struct fb_var_screeninfo maxinefb_defined = {
 	.xres =		1024,
@@ -113,8 +112,6 @@ static int maxinefb_setcolreg(unsigned regno, unsigned red, unsigned green,
 static struct fb_ops maxinefb_ops = {
 	.owner		= THIS_MODULE,
 	.fb_set_var	= gen_set_var,
-	.fb_get_cmap	= gen_get_cmap,
-	.fb_set_cmap	= gen_set_cmap,
 	.fb_setcolreg	= maxinefb_setcolreg,	
 	.fb_fillrect	= cfb_fillrect,
 	.fb_copyarea	= cfb_copyarea,
@@ -156,23 +153,16 @@ int __init maxinefb_init(void)
 		 */
 	}
 
-	/* Let there be consoles... */
-
-	strcpy(fb_info.modename, "Maxine onboard graphics 1024x768x8");
-	fb_info.changevar = NULL;
 	fb_info.node = NODEV;
 	fb_info.fbops = &maxinefb_ops;
 	fb_info.screen_base = (char *) maxinefb_fix.smem_start;
 	fb_info.var = maxinefb_defined;
 	fb_info.fix = maxinefb_fix;
-	fb_info.disp = &disp;
 	fb_info.currcon = -1;
-	fb_info.switch_con = gen_switch;
 	fb_info.updatevar = gen_update_var;
 	fb_info.flags = FBINFO_FLAG_DEFAULT;
 
 	fb_alloc_cmap(&fb_info.cmap, 256, 0);
-	gen_set_disp(-1, &fb_info);
 
 	if (register_framebuffer(&fb_info) < 0)
 		return 1;
diff --git a/drivers/video/modedb.c b/drivers/video/modedb.c
index 16d0aeb9184dcd0ba8c9fa1aecc546f4a974162c..dd092c061217e98debd5dad7733d29df25ccae79 100644
--- a/drivers/video/modedb.c
+++ b/drivers/video/modedb.c
@@ -300,6 +300,7 @@ int __fb_try_mode(struct fb_var_screeninfo *var, struct fb_info *info,
     var->vmode = mode->vmode;
     err = info->fbops->fb_set_var(var, PROC_CONSOLE(info), info);
     var->activate &= ~FB_ACTIVATE_TEST;
+    gen_set_disp(PROC_CONSOLE(info), info);	
     return !err;
 }
 
diff --git a/drivers/video/neofb.c b/drivers/video/neofb.c
index 08174b35099a2a246b3250a60c94683e03680f85..96c3c370ed173b7d82613d99c3dfe376de705a4a 100644
--- a/drivers/video/neofb.c
+++ b/drivers/video/neofb.c
@@ -67,7 +67,6 @@
 #include <asm/mtrr.h>
 #endif
 
-#include <video/fbcon.h>
 #include <video/neomagic.h>
 
 #define NEOFB_VERSION "0.3.3"
@@ -1390,8 +1389,6 @@ static struct fb_ops neofb_ops = {
 	.fb_check_var	= neofb_check_var,
 	.fb_set_par	= neofb_set_par,
 	.fb_set_var	= gen_set_var,
-	.fb_get_cmap	= gen_get_cmap,
-	.fb_set_cmap	= gen_set_cmap,
 	.fb_setcolreg	= neofb_setcolreg,
 	.fb_pan_display	= neofb_pan_display,
 	.fb_blank	= neofb_blank,
@@ -1750,13 +1747,13 @@ static struct fb_info *__devinit neo_alloc_fb_info(struct pci_dev *dev, const st
 	struct fb_info *info;
 	struct neofb_par *par;
 
-	info = kmalloc(sizeof(struct fb_info) + sizeof(struct display) +
-		       sizeof(u32) * 16, GFP_KERNEL);
+	info = kmalloc(sizeof(struct fb_info) + 
+		       sizeof(u32) * 17, GFP_KERNEL);
 
 	if (!info)
 		return NULL;
 
-	memset(info, 0, sizeof(struct fb_info) + sizeof(struct display));
+	memset(info, 0, sizeof(struct fb_info) + sizeof(u32) * 17);
 
 	par = &default_par;
 	memset(par, 0, sizeof(struct neofb_par));
@@ -1818,16 +1815,11 @@ static struct fb_info *__devinit neo_alloc_fb_info(struct pci_dev *dev, const st
 	info->var.width = -1;
 	info->var.accel_flags = 0;
 
-	strcpy(info->modename, info->fix.id);
-
 	info->fbops = &neofb_ops;
-	info->changevar = NULL;
-	info->switch_con = gen_switch;
 	info->updatevar = gen_update_var;
 	info->flags = FBINFO_FLAG_DEFAULT;
 	info->par = par;
-	info->disp = (struct display *) (info + 1);
-	info->pseudo_palette = (void *) (info->disp + 1);
+	info->pseudo_palette = (void *) (info + 1);
 
 	fb_alloc_cmap(&info->cmap, NR_PALETTE, 0);
 
diff --git a/drivers/video/offb.c b/drivers/video/offb.c
index 4186b17c0d67b739cb862787218cb68ecc47b038..f1d1dcabbe808fb0aca139dc1d797c5678946ba0 100644
--- a/drivers/video/offb.c
+++ b/drivers/video/offb.c
@@ -33,7 +33,6 @@
 #include <asm/bootx.h>
 #endif
 
-#include <video/fbcon.h>
 #include <video/macmodes.h>
 
 /* Supported palette hacks */
@@ -84,8 +83,6 @@ static void offb_init_fb(const char *name, const char *full_name,
 static struct fb_ops offb_ops = {
 	.owner		= THIS_MODULE,
 	.fb_set_var	= gen_set_var,
-	.fb_get_cmap	= gen_get_cmap,
-	.fb_set_cmap	= gen_set_cmap,
 	.fb_setcolreg	= offb_setcolreg,
 	.fb_blank	= offb_blank,
 	.fb_fillrect	= cfb_fillrect,
@@ -411,7 +408,7 @@ static void __init offb_init_fb(const char *name, const char *full_name,
 		return;
 	}
 
-	size = sizeof(struct fb_info) + sizeof(struct display) + sizeof(u32) * 17;
+	size = sizeof(struct fb_info) + sizeof(u32) * 17;
 
 	info = kmalloc(size, GFP_ATOMIC);
 	
@@ -528,24 +525,18 @@ static void __init offb_init_fb(const char *name, const char *full_name,
 
 	strcpy(fix->id, "OFfb ");
 	strncat(fix->id, full_name, sizeof(fix->id));
-	strcpy(info->modename, fix->id);
 	info->node = NODEV;
 	info->fbops = &offb_ops;
 	info->screen_base = ioremap(address, fix->smem_len);
 	info->par = par;
-	info->disp = (struct display *) (info + 1);
-	info->pseudo_palette = (void *) (info->disp + 1);
+	info->pseudo_palette = (void *) (info + 1);
 	info->currcon = -1;
 	info->fontname[0] = '\0';
-	info->changevar = NULL;
-	info->switch_con = gen_switch;
 	info->updatevar = gen_update_var;
 	info->flags = FBINFO_FLAG_DEFAULT;
 
 	fb_alloc_cmap(&info->cmap, 256, 0);
 
-	gen_set_disp(-1, info);
-
 	if (register_framebuffer(info) < 0) {
 		kfree(info);
 		release_mem_region(res_start, res_size);
diff --git a/drivers/video/pmag-ba-fb.c b/drivers/video/pmag-ba-fb.c
index aba95ee840c424f7cc12095ff6f6206d7d827130..183eee2e4d7bf62c5a900419296c3711066d3465 100644
--- a/drivers/video/pmag-ba-fb.c
+++ b/drivers/video/pmag-ba-fb.c
@@ -52,7 +52,6 @@ struct pmag_ba_ramdac_regs {
  * Max 3 TURBOchannel slots -> max 3 PMAG-BA :)
  */
 static struct fb_info pmagba_fb_info[3];
-static struct display pmagba_disp[3];
 
 static struct fb_var_screeninfo pmagbafb_defined = {
 	.xres =		1024,
@@ -112,8 +111,6 @@ static int pmagbafb_setcolreg(unsigned regno, unsigned red, unsigned green,
 static struct fb_ops pmagbafb_ops = {
 	.owner		= THIS_MODULE,
 	.fb_set_var	= gen_set_var,
-	.fb_get_cmap	= gen_get_cmap,
-	.fb_set_cmap	= gen_set_cmap,
 	.fb_setcolreg	= pmagbafb_setcolreg,
 	.fb_fillrect	= cfb_fillrect,
 	.fb_copyarea	= cfb_copyarea,
@@ -124,7 +121,6 @@ int __init pmagbafb_init_one(int slot)
 {
 	unsigned long base_addr = get_tc_base_addr(slot);
 	struct fb_info *info = &pmagba_fb_info[slot]; 
-	struct display *disp = &pmagba_disp[slot];
 
 	printk("PMAG-BA framebuffer in slot %d\n", slot);
 	/*
@@ -141,21 +137,16 @@ int __init pmagbafb_init_one(int slot)
 	/*
 	 *      Let there be consoles..
 	 */
-	strcpy(info->modename, pmagbafb_fix.id);
-	info->changevar = NULL;
 	info->node = NODEV;
 	info->fbops = &pmagbafb_ops;
 	info->var = pmagbafb_defined;
 	info->fix = pmagbafb_fix; 
 	info->screen_base = pmagbafb_fix.smem_start;
-	info->disp = &disp;
 	info->currcon = -1;
-	info->switch_con = gen_switch;
 	info->updatevar = gen_update_var;
 	info->flags = FBINFO_FLAG_DEFAULT;
 
 	fb_alloc_cmap(&fb_info.cmap, 256, 0);
-	gen_set_disp(-1, info);
 	
 	if (register_framebuffer(info) < 0)
 		return 1;
diff --git a/drivers/video/pmagb-b-fb.c b/drivers/video/pmagb-b-fb.c
index 9d95f157ce46fa05ead370656fafbd8ee44ea366..bb9bc981f2cf035c2c17fe673ce189818a3464c9 100644
--- a/drivers/video/pmagb-b-fb.c
+++ b/drivers/video/pmagb-b-fb.c
@@ -39,8 +39,6 @@
 #include <asm/dec/tc.h>
 #include "pmagb-b-fb.h"
 
-#include <video/fbcon.h>
-
 struct pmagb_b_ramdac_regs {
 	unsigned char addr_low;
 	unsigned char pad0[3];
@@ -55,7 +53,6 @@ struct pmagb_b_ramdac_regs {
  * Max 3 TURBOchannel slots -> max 3 PMAGB-B :)
  */
 static struct fb_info pmagbb_fb_info[3];
-static struct display pmagbb_disp[3];
 
 static struct fb_var_screeninfo pmagbbfb_defined = {
 	.xres =		1280,
@@ -115,8 +112,6 @@ static int pmagbbfb_setcolreg(unsigned regno, unsigned red, unsigned green,
 static struct fb_ops pmagbbfb_ops = {
 	.owner		= THIS_MODULE,
 	.fb_set_var	= gen_set_var,
-	.fb_get_cmap	= gen_get_cmap,
-	.fb_set_cmap	= gen_set_cmap,
 	.fb_setcolreg	= pmagbbfb_setcolreg,
 	.fb_fillrect	= cfb_fillrect,
 	.fb_copyarea	= cfb_copyarea,
@@ -127,7 +122,6 @@ int __init pmagbbfb_init_one(int slot)
 {
 	unsigned long base_addr = get_tc_base_addr(slot);
 	struct fb_info *info = &pmagbb_fb_info[slot];
-	struct display *disp = &pmagbb_disp[slot];
 
 	printk("PMAGB-BA framebuffer in slot %d\n", slot);
 	/*
@@ -144,21 +138,16 @@ int __init pmagbbfb_init_one(int slot)
 	/*
 	 *      Let there be consoles..
 	 */
-	strcpy(info->modename, pmagbbfb_fix.id);
-	info->changevar = NULL;
 	info->node = NODEV;
 	info->fbops = &pmagbbfb_ops;
 	info->var = pmagbbfb_defined;
 	info->fix = pmagbbfb_fix;
 	info->screen_base = pmagbbfb_fix.smem_start; 
-	info->disp = &disp;
 	info->currcon = -1;
-	info->switch_con = gen_switch;
 	info->updatevar = gen_update_var;
 	info->flags = FBINFO_FLAG_DEFAULT;
 
 	fb_alloc_cmap(&fb_info.cmap, 256, 0);
-	gen_set_disp(-1, info);
 
 	if (register_framebuffer(info) < 0)
 		return 1;
diff --git a/drivers/video/q40fb.c b/drivers/video/q40fb.c
index 97b036f6cce079042ed57e5982911a03c2dc527c..f92f9df8a457b90860c8fb1e58c460dc0e497e51 100644
--- a/drivers/video/q40fb.c
+++ b/drivers/video/q40fb.c
@@ -28,13 +28,10 @@
 #include <linux/module.h>
 #include <asm/pgtable.h>
 
-#include <video/fbcon.h>
-
 #define Q40_PHYS_SCREEN_ADDR 0xFE800000
 
 static u32 pseudo_palette[17];
 static struct fb_info fb_info;
-static struct display display;
 
 static struct fb_fix_screeninfo q40fb_fix __initdata = {
 	.id		= "Q40",
@@ -70,8 +67,6 @@ static int q40fb_setcolreg(unsigned regno, unsigned red, unsigned green,
 static struct fb_ops q40fb_ops = {
 	.owner		= THIS_MODULE,
 	.fb_set_var	= gen_set_var,
-	.fb_get_cmap	= gen_get_cmap,
-	.fb_set_cmap	= gen_set_cmap,
 	.fb_setcolreg	= q40fb_setcolreg,
 	.fb_fillrect	= cfb_fillrect,
 	.fb_copyarea	= cfb_copyarea,
@@ -118,14 +113,9 @@ int q40fb_init(void)
 
 	/* The below feilds will go away !!!! */
 	fb_info.currcon		= -1;
-	strcpy(fb_info.modename, fb_info.fix.id);
-	fb_info.disp		= &display;
-	fb_info.switch_con	= gen_switch;
 	fb_info.updatevar	= gen_update_var;
 	fb_alloc_cmap(&fb_info.cmap, 16, 0);
 
-        gen_set_disp(-1, &fb_info);
-	
 	master_outb(3, DISPLAY_CONTROL_REG);
 
 	if (register_framebuffer(&fb_info) < 0) {
diff --git a/drivers/video/sa1100fb.c b/drivers/video/sa1100fb.c
index 6a2683bba658b879e2786528dee9d3a340ff66fe..2b37160ddc6473398fbf1d453c8ea0c5e86926d5 100644
--- a/drivers/video/sa1100fb.c
+++ b/drivers/video/sa1100fb.c
@@ -1753,7 +1753,7 @@ static void sa1100fb_disable_controller(struct sa1100fb_info *fbi)
 	LCCR0 &= ~LCCR0_LEN;	/* Disable LCD Controller */
 
 	schedule_timeout(20 * HZ / 1000);
-	current->state = TASK_RUNNING;
+	set_current_state(TASK_RUNNING);
 	remove_wait_queue(&fbi->ctrlr_wait, &wait);
 }
 
diff --git a/drivers/video/sgivwfb.c b/drivers/video/sgivwfb.c
index 59400e61e4488e2b9fd8c312804c89d75080c68d..e121f4af3e37091d6563374ff2b7cc211a3c8697 100644
--- a/drivers/video/sgivwfb.c
+++ b/drivers/video/sgivwfb.c
@@ -26,8 +26,6 @@
 #include <asm/io.h>
 #include <asm/mtrr.h>
 
-#include <video/fbcon.h>
-
 #define INCLUDE_TIMING_TABLE_DATA
 #define DBE_REG_BASE regs
 #include <video/sgivw.h>
@@ -85,9 +83,6 @@ static struct fb_var_screeninfo sgivwfb_var __initdata = {
         .vmode		= FB_VMODE_NONINTERLACED
 };
 
-/* console related variables */
-static struct display disp;
-
 /*
  *  Interface used by the world
  */
@@ -105,8 +100,6 @@ static int sgivwfb_mmap(struct fb_info *info, struct file *file,
 static struct fb_ops sgivwfb_ops = {
 	.owner		= THIS_MODULE,
 	.fb_set_var	= gen_set_var,
-	.fb_get_cmap	= gen_get_cmap,
-	.fb_set_cmap	= gen_set_cmap,
 	.fb_check_var	= sgivwfb_check_var,
 	.fb_set_par	= sgivwfb_set_par,
 	.fb_setcolreg	= sgivwfb_setcolreg,
@@ -240,8 +233,8 @@ static int sgivwfb_check_var(struct fb_var_screeninfo *var,
 
 	if (var->vmode & FB_VMODE_CONUPDATE) {
 		var->vmode |= FB_VMODE_YWRAP;
-		var->xoffset = display->var.xoffset;
-		var->yoffset = display->var.yoffset;
+		var->xoffset = info->var.xoffset;
+		var->yoffset = info->var.yoffset;
 	}
 
 	/* XXX FIXME - forcing var's */
@@ -720,17 +713,13 @@ int __init sgivwfb_init(void)
 	sgivwfb_fix.ywrapstep = ywrap;
 	sgivwfb_fix.ypanstep = ypan;
 
-	strcpy(fb_info.modename, sgivwfb_fix.id);
-	fb_info.changevar = NULL;
 	fb_info.node = NODEV;
 	fb_info.fix = sgivwfb_fix;
 	fb_info.var = sgivwfb_var;
 	fb_info.fbops = &sgivwfb_ops;
 	fb_info.pseudo_palette = pseudo_palette;
 	fb_info.par = &default_par;
-	fb_info.disp = &disp;
 	fb_info.currcon = -1;
-	fb_info.switch_con = gen_switch;
 	fb_info.updatevar = gen_update_var;
 	fb_info.flags = FBINFO_FLAG_DEFAULT;
 
diff --git a/drivers/video/skeletonfb.c b/drivers/video/skeletonfb.c
index 110e85dea3324a3b38266f4f3275b86146445899..6e856fb4e18fdc46634f7a0892fba00f4758a32d 100644
--- a/drivers/video/skeletonfb.c
+++ b/drivers/video/skeletonfb.c
@@ -125,9 +125,6 @@ static struct fb_info info;
      */
 static struct xxx_par __initdata current_par;
 
-    /* To go away in the near future */ 
-static struct display disp;
-
 int xxxfb_init(void);
 int xxxfb_setup(char*);
 
@@ -450,7 +447,6 @@ int __init xxxfb_init(void)
      * mode. If we are setting the mode ourselves we don't call this. 
      */	
     info.var = xxxfb_var;
-    gen_set_disp(-1, &fb_info);
 	
     if (register_framebuffer(&info) < 0)
 	return -EINVAL;
@@ -512,8 +508,6 @@ static struct fb_ops xxxfb_ops = {
 	.fb_release	= xxxfb_release, /* only if you need it to do something */
 	/* Stuff to go away. Use generic functions for now */
 	.fb_set_var	= gen_set_var,	
-	.fb_get_cmap	= gen_get_cmap,
-	.fb_set_cmap	= gen_set_cmap,
 
 	.fb_check_var	= xxxfb_check_var,
 	.fb_set_par	= xxxfb_set_par,	/* optional */	
diff --git a/drivers/video/tdfxfb.c b/drivers/video/tdfxfb.c
index 0543704cc7b4068b6d3c60e616dff60fbe5e258c..81b386defeb7bff07211725f1f02a95e7ad7a0f2 100644
--- a/drivers/video/tdfxfb.c
+++ b/drivers/video/tdfxfb.c
@@ -170,8 +170,6 @@ static void tdfxfb_imageblit(struct fb_info *info, struct fb_image *image);
 static struct fb_ops tdfxfb_ops = {
 	.owner		= THIS_MODULE,
 	.fb_set_var	= gen_set_var,
-	.fb_get_cmap	= gen_get_cmap,
-	.fb_set_cmap	= gen_set_cmap,
 	.fb_check_var	= tdfxfb_check_var,
 	.fb_set_par	= tdfxfb_set_par,
 	.fb_setcolreg	= tdfxfb_setcolreg,
@@ -192,8 +190,6 @@ static unsigned long do_lfb_size(unsigned short);
 /*
  * Driver data 
  */
-static struct tdfx_par default_par;
-
 static int  nopan   = 0;
 static int  nowrap  = 1;      // not implemented (yet)
 static int  inverse = 0;
@@ -204,59 +200,59 @@ static char *mode_option __initdata = NULL;
  * ------------------------------------------------------------------------- */
 
 #ifdef VGA_REG_IO 
-static inline  u8 vga_inb(u32 reg) { return inb(reg); }
-static inline u16 vga_inw(u32 reg) { return inw(reg); }
-static inline u16 vga_inl(u32 reg) { return inl(reg); }
+static inline  u8 vga_inb(struct tdfx_par *par, u32 reg) { return inb(reg); }
+static inline u16 vga_inw(struct tdfx_par *par, u32 reg) { return inw(reg); }
+static inline u16 vga_inl(struct tdfx_par *par, u32 reg) { return inl(reg); }
 
-static inline void vga_outb(u32 reg,  u8 val) { outb(val, reg); }
-static inline void vga_outw(u32 reg, u16 val) { outw(val, reg); }
-static inline void vga_outl(u32 reg, u32 val) { outl(val, reg); }
+static inline void vga_outb(struct tdfx_par *par, u32 reg,  u8 val) { outb(val, reg); }
+static inline void vga_outw(struct tdfx_par *par, u32 reg, u16 val) { outw(val, reg); }
+static inline void vga_outl(struct tdfx_par *par, u32 reg, u32 val) { outl(val, reg); }
 #else
-static inline  u8 vga_inb(u32 reg) { 
-	return inb(default_par.iobase + reg - 0x300); 
+static inline  u8 vga_inb(struct tdfx_par *par, u32 reg) { 
+	return inb(par->iobase + reg - 0x300); 
 }
-static inline u16 vga_inw(u32 reg) { 
-	return inw(default_par.iobase + reg - 0x300); 
+static inline u16 vga_inw(struct tdfx_par *par, u32 reg) { 
+	return inw(par->iobase + reg - 0x300); 
 }
-static inline u16 vga_inl(u32 reg) { 
-	return inl(default_par.iobase + reg - 0x300); 
+static inline u16 vga_inl(struct tdfx_par *par, u32 reg) { 
+	return inl(par->iobase + reg - 0x300); 
 }
-static inline void vga_outb(u32 reg,  u8 val) { 
-	outb(val, default_par.iobase + reg - 0x300); 
+static inline void vga_outb(struct tdfx_par *par, u32 reg,  u8 val) { 
+	outb(val, par->iobase + reg - 0x300); 
 }
-static inline void vga_outw(u32 reg, u16 val) { 
-	outw(val, default_par.iobase + reg - 0x300); 
+static inline void vga_outw(struct tdfx_par *par, u32 reg, u16 val) { 
+	outw(val, par->iobase + reg - 0x300); 
 }
-static inline void vga_outl(u32 reg, u32 val) { 
-	outl(val, default_par.iobase + reg - 0x300); 
+static inline void vga_outl(struct tdfx_par *par, u32 reg, u32 val) { 
+	outl(val, par->iobase + reg - 0x300); 
 }
 #endif
 
-static inline void gra_outb(u32 idx, u8 val) {
+static inline void gra_outb(struct tdfx_par *par, u32 idx, u8 val) {
 	vga_outb(GRA_I, idx); vga_outb(GRA_D, val);
 }
 
-static inline u8 gra_inb(u32 idx) {
+static inline u8 gra_inb(struct tdfx_par *par, u32 idx) {
 	vga_outb(GRA_I, idx); return vga_inb(GRA_D);
 }
 
-static inline void seq_outb(u32 idx, u8 val) {
+static inline void seq_outb(struct tdfx_par *par, u32 idx, u8 val) {
 	vga_outb(SEQ_I, idx); vga_outb(SEQ_D, val);
 }
 
-static inline u8 seq_inb(u32 idx) {
+static inline u8 seq_inb(struct tdfx_par *par, u32 idx) {
 	vga_outb(SEQ_I, idx); return vga_inb(SEQ_D);
 }
 
-static inline void crt_outb(u32 idx, u8 val) {
+static inline void crt_outb(struct tdfx_par *par, u32 idx, u8 val) {
 	vga_outb(CRT_I, idx); vga_outb(CRT_D, val);
 }
 
-static inline u8 crt_inb(u32 idx) {
+static inline u8 crt_inb(struct tdfx_par *par, u32 idx) {
 	vga_outb(CRT_I, idx); return vga_inb(CRT_D);
 }
 
-static inline void att_outb(u32 idx, u8 val) 
+static inline void att_outb(struct tdfx_par *par, u32 idx, u8 val) 
 {
 	unsigned char tmp;
 	
@@ -265,7 +261,7 @@ static inline void att_outb(u32 idx, u8 val)
 	vga_outb(ATT_IW, val);
 }
 
-static inline u8 att_inb(u32 idx) 
+static inline u8 att_inb(struct tdfx_par *par, u32 idx) 
 {
 	unsigned char tmp;
 
@@ -300,36 +296,36 @@ static inline void vga_disable_palette(void)
 	vga_outb(ATT_IW, 0x00);
 }
 
-static inline void vga_enable_palette(void)
+static inline void vga_enable_palette(struct tdfx_par *par)
 {
 	vga_inb(IS1_R);
 	vga_outb(ATT_IW, 0x20);
 }
 
-static inline u32 tdfx_inl(unsigned int reg) 
+static inline u32 tdfx_inl(struct tdfx_par *par, unsigned int reg) 
 {
-	return readl(default_par.regbase_virt + reg);
+	return readl(par->regbase_virt + reg);
 }
 
-static inline void tdfx_outl(unsigned int reg, u32 val)
+static inline void tdfx_outl(struct tdfx_par *par, unsigned int reg, u32 val)
 {
-	writel(val, default_par.regbase_virt + reg);
+	writel(val, par->regbase_virt + reg);
 }
 
-static inline void banshee_make_room(int size)
+static inline void banshee_make_room(struct tdfx_par *par, int size)
 {
-	while((tdfx_inl(STATUS) & 0x1f) < size);
+	while((tdfx_inl(par, STATUS) & 0x1f) < size);
 }
  
-static inline void banshee_wait_idle(void)
+static inline void banshee_wait_idle(struct tdfx_par *par)
 {
 	int i = 0;
 
 	banshee_make_room(1);
-	tdfx_outl(COMMAND_3D, COMMAND_3D_NOP);
+	tdfx_outl(par, COMMAND_3D, COMMAND_3D_NOP);
 
 	while(1) {
-		i = (tdfx_inl(STATUS) & STATUS_BUSY) ? 0 : i + 1;
+		i = (tdfx_inl(par, STATUS) & STATUS_BUSY) ? 0 : i + 1;
 		if(i == 3) break;
 	}
 }
@@ -337,11 +333,11 @@ static inline void banshee_wait_idle(void)
 /*
  * Set the color of a palette entry in 8bpp mode 
  */
-static inline void do_setpalentry(unsigned regno, u32 c)
+static inline void do_setpalentry(struct tdfx_par *par, unsigned regno, u32 c)
 {  
 	banshee_make_room(2);
-	tdfx_outl(DACADDR, regno);
-	tdfx_outl(DACDATA, c);
+	tdfx_outl(par, DACADDR, regno);
+	tdfx_outl(par, DACDATA, c);
 }
 
 static u32 do_calc_pll(int freq, int* freq_out) 
@@ -979,6 +975,7 @@ static int __devinit tdfxfb_probe(struct pci_dev *pdev,
                                   const struct pci_device_id *id)
 {
 	struct fb_info *info;
+	struct tdfx_par *par;
 	int size, err;
 
 	if ((err = pci_enable_device(pdev))) {
@@ -986,33 +983,33 @@ static int __devinit tdfxfb_probe(struct pci_dev *pdev,
 		return err;
 	}
 
-	info = kmalloc(sizeof(struct fb_info) + sizeof(struct display) +
-			sizeof(u32) * 16, GFP_KERNEL);
+	info = kmalloc(sizeof(struct fb_info) + sizeof(struct tdfx_par) +
+			sizeof(u32) * 17, GFP_KERNEL);
 
 	if (!info)	return -ENOMEM;
 		
-	memset(info, 0, sizeof(info) + sizeof(struct display) + sizeof(u32) * 16);
+	memset(info, 0, sizeof(info) + sizeof(struct tdfx_par) + sizeof(u32) * 17);
      
 	/* Configure the default fb_fix_screeninfo first */
 	switch (pdev->device) {
 		case PCI_DEVICE_ID_3DFX_BANSHEE:	
 			strcat(tdfx_fix.id, " Banshee");
-			default_par.max_pixclock = BANSHEE_MAX_PIXCLOCK;
+			par->max_pixclock = BANSHEE_MAX_PIXCLOCK;
 			break;
 		case PCI_DEVICE_ID_3DFX_VOODOO3:
 			strcat(tdfx_fix.id, " Voodoo3");
-			default_par.max_pixclock = VOODOO3_MAX_PIXCLOCK;
+			par->max_pixclock = VOODOO3_MAX_PIXCLOCK;
 			break;
 		case PCI_DEVICE_ID_3DFX_VOODOO5:
 			strcat(tdfx_fix.id, " Voodoo5");
-			default_par.max_pixclock = VOODOO5_MAX_PIXCLOCK;
+			par->max_pixclock = VOODOO5_MAX_PIXCLOCK;
 			break;
 	}
 
 	tdfx_fix.mmio_start = pci_resource_start(pdev, 0);
 	tdfx_fix.mmio_len = pci_resource_len(pdev, 0);
-	default_par.regbase_virt = ioremap_nocache(tdfx_fix.mmio_start, tdfx_fix.mmio_len);
-	if (!default_par.regbase_virt) {
+	par->regbase_virt = ioremap_nocache(tdfx_fix.mmio_start, tdfx_fix.mmio_len);
+	if (!par->regbase_virt) {
 		printk("fb: Can't remap %s register area.\n", tdfx_fix.id);
 		goto out_err;
 	}
@@ -1050,7 +1047,7 @@ static int __devinit tdfxfb_probe(struct pci_dev *pdev,
 		goto out_err;
 	}
 
-	default_par.iobase = pci_resource_start(pdev, 2);
+	par->iobase = pci_resource_start(pdev, 2);
     
 	if (!request_region(pci_resource_start(pdev, 2),
 	    pci_resource_len(pdev, 2), "tdfx iobase")) {
@@ -1073,15 +1070,13 @@ static int __devinit tdfxfb_probe(struct pci_dev *pdev,
 	info->node		= NODEV;
 	info->fbops		= &tdfxfb_ops;
 	info->fix		= tdfx_fix; 	
-	info->par		= &default_par;
-	info->disp		= (struct display *)(info + 1);	
-	info->pseudo_palette	= (void *)(info->disp + 1); 
+	info->par		= (struct tdfx_par *)(info + 1);	
+	info->pseudo_palette	= (void *)(info->par + 1); 
 	info->flags		= FBINFO_FLAG_DEFAULT;
 
-	/* The below feilds will go away !!!! */
+	/* The below fields will go away !!!! */
 	strcpy(info->modename, info->fix.id);
 	info->currcon		= -1;
-	info->switch_con	= gen_switch;			 
 	info->updatevar		= gen_update_var;
 
 	if (!mode_option)
@@ -1110,10 +1105,11 @@ static int __devinit tdfxfb_probe(struct pci_dev *pdev,
 	/*
 	 * Cleanup after anything that was remapped/allocated.
 	 */
-	if (default_par.regbase_virt)
-		iounmap(default_par.regbase_virt);
+	if (par->regbase_virt)
+		iounmap(par->regbase_virt);
 	if (info->screen_base)
 		iounmap(info->screen_base);
+	kfree(par);
 	kfree(info);
 	return -ENXIO;
 }
diff --git a/drivers/video/tx3912fb.c b/drivers/video/tx3912fb.c
index d395664206ecfbd80cfa9dc2cf7967431fb107a9..12041d64f96053419676ce8a70568de7c3b2ead1 100644
--- a/drivers/video/tx3912fb.c
+++ b/drivers/video/tx3912fb.c
@@ -21,7 +21,6 @@
 #include <linux/init.h>
 #include <linux/pm.h>
 #include <linux/fb.h>
-#include <video/fbcon.h>
 #include <asm/io.h>
 #include <asm/bootinfo.h>
 #include <asm/uaccess.h>
@@ -33,7 +32,6 @@
  */
 static struct fb_info fb_info;
 static u32 cfb8[16];
-static struct display disp;
 
 static struct fb_fix_screeninfo tx3912fb_fix __initdata = {
 	.id =		"tx3912fb",
@@ -97,8 +95,6 @@ static int tx3912fb_setcolreg(u_int regno, u_int red, u_int green,
 static struct fb_ops tx3912fb_ops = {
 	.owner		= THIS_MODULE,
 	.fb_set_var	= gen_set_var,
-	.fb_get_cmap	= gen_get_cmap,
-	.fb_set_cmap	= gen_set_cmap,
 	.fb_setcolreg	= tx3912fb_setcolreg,
 	.fb_fillrect	= cfb_fillrect,
 	.fb_copyarea	= cfb_copyarea,
@@ -295,16 +291,12 @@ int __init tx3912fb_init(void)
 	if ((tx3912fb_fix.line_length * tx3912fb_var.yres_virtual) > tx3912fb_fix.smem_len)
 		return -ENOMEM;
 
-	strcpy(fb_info.modename, tx3912fb_fix.id);
-	fb_info.changevar = NULL;
 	fb_info.node = NODEV;
 	fb_info.currcon = -1;
 	fb_info.fbops = &tx3912fb_ops;
 	fb_info.var = tx3912fb_var;
 	fb_info.fix = tx3912fb_fix;
 	fb_info.pseudo_palette = pseudo_palette;
-	fb_info.disp = &disp;
-	fb_info.switch_con = gen_switch;
 	fb_info.updatevar = gen_update_var;
 	fb_info.flags = FBINFO_FLAG_DEFAULT;
 
@@ -313,7 +305,6 @@ int __init tx3912fb_init(void)
 	udelay(200);
 
 	fb_alloc_cmap(&info->cmap, size, 0);
-	gen_set_disp(-1, &disp);	
 
 	if (register_framebuffer(&fb_info) < 0)
 		return -1;
diff --git a/drivers/video/vesafb.c b/drivers/video/vesafb.c
index 1326c71bd6977acb05723d6c1d47ad5b4062ff38..0fbd132941fc770a178c8078e84c1fcf932d443c 100644
--- a/drivers/video/vesafb.c
+++ b/drivers/video/vesafb.c
@@ -17,16 +17,12 @@
 #include <linux/slab.h>
 #include <linux/delay.h>
 #include <linux/fb.h>
-#include <linux/console.h>
-#include <linux/selection.h>
 #include <linux/ioport.h>
 #include <linux/init.h>
 
 #include <asm/io.h>
 #include <asm/mtrr.h>
 
-#include <video/fbcon.h>
-
 #define dac_reg	(0x3c8)
 #define dac_val	(0x3c9)
 
@@ -49,7 +45,6 @@ static struct fb_fix_screeninfo vesafb_fix __initdata = {
 	.accel	= FB_ACCEL_NONE,
 };
 
-static struct display disp;
 static struct fb_info fb_info;
 static u32 pseudo_palette[17];
 
@@ -176,8 +171,6 @@ static int vesafb_setcolreg(unsigned regno, unsigned red, unsigned green,
 static struct fb_ops vesafb_ops = {
 	.owner		= THIS_MODULE,
 	.fb_set_var	= gen_set_var,
-	.fb_get_cmap	= gen_get_cmap,
-	.fb_set_cmap	= gen_set_cmap,
 	.fb_setcolreg	= vesafb_setcolreg,
 	.fb_pan_display	= vesafb_pan_display,
 	.fb_fillrect	= cfb_fillrect,
@@ -351,21 +344,16 @@ int __init vesafb_init(void)
 		}
 	}
 	
-	strcpy(fb_info.modename, vesafb_fix.id);
-	fb_info.changevar = NULL;
 	fb_info.node = NODEV;
 	fb_info.fbops = &vesafb_ops;
 	fb_info.var = vesafb_defined;
 	fb_info.fix = vesafb_fix;
 	fb_info.currcon = -1;
-	fb_info.disp = &disp;
-	fb_info.switch_con = gen_switch;
 	fb_info.updatevar = gen_update_var;
 	fb_info.pseudo_palette = pseudo_palette;
 	fb_info.flags = FBINFO_FLAG_DEFAULT;
 
 	fb_alloc_cmap(&fb_info.cmap, video_cmap_len, 0);
-	gen_set_disp(-1, &fb_info);
 
 	if (register_framebuffer(&fb_info)<0)
 		return -EINVAL;
diff --git a/drivers/video/vfb.c b/drivers/video/vfb.c
index 5ed50a49b234e432d3881b8f4246927046fe682a..fbc16c0be81f72da419d8b54b7c6ac26d234c671 100644
--- a/drivers/video/vfb.c
+++ b/drivers/video/vfb.c
@@ -24,8 +24,6 @@
 #include <linux/fb.h>
 #include <linux/init.h>
 
-#include <video/fbcon.h>
-
     /*
      *  RAM we reserve for the frame buffer. This defines the maximum screen
      *  size
@@ -42,7 +40,6 @@ static const char *mode_option __initdata = NULL;
 
 static struct fb_info fb_info;
 static u32 vfb_pseudo_palette[17];
-static struct display disp;
 
 static struct fb_var_screeninfo vfb_default __initdata = {
 	.xres =		640,
@@ -97,8 +94,6 @@ static int vfb_mmap(struct fb_info *info, struct file *file,
 
 static struct fb_ops vfb_ops = {
 	.fb_set_var	gen_set_var,
-	.fb_get_cmap	gen_set_cmap,
-	.fb_set_cmap	gen_set_cmap,
 	.fb_check_var	vfb_check_var,
 	.fb_set_par	vfb_set_par,
 	.fb_setcolreg	vfb_setcolreg,
@@ -444,11 +439,7 @@ int __init vfb_init(void)
 	fb_info.pseudo_palette = &vfb_pseudo_palette;
 	fb_info.flags = FBINFO_FLAG_DEFAULT;
 
-	strcpy(fb_info.modename, vfb_fix.id);
-	fb_info.changevar = NULL;
 	fb_info.currcon = -1;
-	fb_info.disp = &disp;
-	fb_info.switch_con = gen_switch;
 	fb_info.updatevar = gen_update_var;
 
 	fb_alloc_cmap(&fb_info.cmap, 256, 0);
diff --git a/drivers/video/vgacon.c b/drivers/video/vgacon.c
index b65d47810913f839909538e068ecccc8f481d916..b798756cef748f06897f4be4d07e3b231707ac59 100644
--- a/drivers/video/vgacon.c
+++ b/drivers/video/vgacon.c
@@ -180,6 +180,13 @@ static const char __init *vgacon_startup(void)
 #endif
 	}
 
+	/* VGA16 modes are not handled by VGACON */
+	if ((ORIG_VIDEO_MODE == 0x0D) || /* 320x200/4 */
+	    (ORIG_VIDEO_MODE == 0x0E) || /* 640x200/4 */
+	    (ORIG_VIDEO_MODE == 0x10) || /* 640x350/4 */
+	    (ORIG_VIDEO_MODE == 0x12) || /* 640x480/4 */
+	    (ORIG_VIDEO_MODE == 0x6A))   /* 800x600/4, 0x6A is very common */
+		goto no_vga;
 
 	vga_video_num_lines = ORIG_VIDEO_LINES;
 	vga_video_num_columns = ORIG_VIDEO_COLS;
diff --git a/include/linux/fb.h b/include/linux/fb.h
index d1782a6bd008b692a65b79bc3060bba1e3e30574..94cd4901fa95ce1141f1667097edfd42689d2d25 100644
--- a/include/linux/fb.h
+++ b/include/linux/fb.h
@@ -3,6 +3,7 @@
 
 #include <linux/tty.h>
 #include <asm/types.h>
+#include <asm/io.h>
 
 /* Definitions of frame buffers						*/
 
@@ -264,10 +265,10 @@ struct fb_vblank {
 struct fb_copyarea {
 	__u32 sx;	/* screen-relative */
 	__u32 sy;
-	__u32 width;
-	__u32 height;
 	__u32 dx;
 	__u32 dy;
+	__u32 width;
+	__u32 height;
 };
 
 struct fb_fillrect {
@@ -280,10 +281,10 @@ struct fb_fillrect {
 };
 
 struct fb_image {
+	__u32 dx;	/* Where to place image */
+	__u32 dy;
 	__u32 width;	/* Size of image */
 	__u32 height;
-	__u16 dx;	/* Where to place image */
-	__u16 dy;
 	__u32 fg_color;	/* Only used when a mono bitmap */
 	__u32 bg_color;
 	__u8  depth;	/* Dpeth of the image */
@@ -319,12 +320,6 @@ struct fb_ops {
     /* set settable parameters */
     int (*fb_set_var)(struct fb_var_screeninfo *var, int con,
 		      struct fb_info *info);		
-    /* get colormap */
-    int (*fb_get_cmap)(struct fb_cmap *cmap, int kspc, int con,
-		       struct fb_info *info);
-    /* set colormap */
-    int (*fb_set_cmap)(struct fb_cmap *cmap, int kspc, int con,
-		       struct fb_info *info);
     /* checks var and creates a par based on it */
     int (*fb_check_var)(struct fb_var_screeninfo *var, struct fb_info *info);
     /* set the video mode according to par */
@@ -354,7 +349,6 @@ struct fb_ops {
 };
 
 struct fb_info {
-   char modename[40];			/* default video mode */
    kdev_t node;
    int flags;
    int open;                            /* Has this been open already ? */
@@ -365,15 +359,11 @@ struct fb_info {
    struct fb_cmap cmap;                 /* Current cmap */
    struct fb_ops *fbops;
    char *screen_base;                   /* Virtual address */
-   struct display *disp;		/* initial display variable */
    struct vc_data *display_fg;		/* Console visible on this display */
    int currcon;				/* Current VC. */	
    char fontname[40];			/* default font name */
    devfs_handle_t devfs_handle;         /* Devfs handle for new name         */
    devfs_handle_t devfs_lhandle;        /* Devfs handle for compat. symlink  */
-   int (*changevar)(int);		/* tell console var has changed */
-   int (*switch_con)(int, struct fb_info*);
-					/* tell fb to switch consoles */
    int (*updatevar)(int, struct fb_info*);
 					/* tell fb to update the vars */
    void *pseudo_palette;                /* Fake palette of 16 colors and 
@@ -387,6 +377,42 @@ struct fb_info {
 #define FBINFO_FLAG_DEFAULT	FBINFO_FLAG_MODULE
 #else
 #define FBINFO_FLAG_DEFAULT	0
+#endif
+
+#if defined(__sparc__)
+
+/* We map all of our framebuffers such that big-endian accesses
+ * are what we want, so the following is sufficient.
+ */
+
+#define fb_readb sbus_readb
+#define fb_readw sbus_readw
+#define fb_readl sbus_readl
+#define fb_writeb sbus_writeb
+#define fb_writew sbus_writew
+#define fb_writel sbus_writel
+#define fb_memset sbus_memset_io
+
+#elif defined(__i386__) || defined(__alpha__) || defined(__x86_64__)
+
+#define fb_readb __raw_readb
+#define fb_readw __raw_readw
+#define fb_readl __raw_readl
+#define fb_writeb __raw_writeb
+#define fb_writew __raw_writew
+#define fb_writel __raw_writel
+#define fb_memset memset_io
+
+#else
+
+#define fb_readb(addr) (*(volatile u8 *) (addr))
+#define fb_readw(addr) (*(volatile u16 *) (addr))
+#define fb_readl(addr) (*(volatile u32 *) (addr))
+#define fb_writeb(b,addr) (*(volatile u8 *) (addr) = (b))
+#define fb_writew(b,addr) (*(volatile u16 *) (addr) = (b))
+#define fb_writel(b,addr) (*(volatile u32 *) (addr) = (b))
+#define fb_memset memset
+
 #endif
 
     /*
@@ -395,14 +421,10 @@ struct fb_info {
 
 extern int gen_set_var(struct fb_var_screeninfo *var, int con,
 		       struct fb_info *info);
-extern int gen_get_cmap(struct fb_cmap *cmap, int kspc, int con,
-			struct fb_info *info);
-extern int gen_set_cmap(struct fb_cmap *cmap, int kspc, int con,
-			struct fb_info *info);
 extern int fb_pan_display(struct fb_var_screeninfo *var, int con,
 			     struct fb_info *info);
 extern void cfb_fillrect(struct fb_info *info, struct fb_fillrect *rect); 
-extern void cfb_copyarea(struct fb_info *info, struct fb_copyarea *region); 
+extern void cfb_copyarea(struct fb_info *info, struct fb_copyarea *area); 
 extern void cfb_imageblit(struct fb_info *info, struct fb_image *image);
 
     /*
@@ -412,7 +434,6 @@ extern void cfb_imageblit(struct fb_info *info, struct fb_image *image);
 extern void do_install_cmap(int con, struct fb_info *info);
 extern int gen_update_var(int con, struct fb_info *info);
 extern int fb_blank(int blank, struct fb_info *info);
-extern int gen_switch(int con, struct fb_info *info);
 extern void gen_set_disp(int con, struct fb_info *info);
 
 /* drivers/video/fbmem.c */
diff --git a/include/video/fbcon-cfb16.h b/include/video/fbcon-cfb16.h
deleted file mode 100644
index 3ccc7d7cd535e1af7c930095ac4d45412a60304a..0000000000000000000000000000000000000000
--- a/include/video/fbcon-cfb16.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- *  FBcon low-level driver for 16 bpp packed pixel (cfb16)
- */
-
-#ifndef _VIDEO_FBCON_CFB16_H
-#define _VIDEO_FBCON_CFB16_H
-
-#include <linux/config.h>
-
-#ifdef MODULE
-#if defined(CONFIG_FBCON_CFB16) || defined(CONFIG_FBCON_CFB16_MODULE)
-#define FBCON_HAS_CFB16
-#endif
-#else
-#if defined(CONFIG_FBCON_CFB16)
-#define FBCON_HAS_CFB16
-#endif
-#endif
-
-extern struct display_switch fbcon_cfb16;
-extern void fbcon_cfb16_setup(struct display *p);
-extern void fbcon_cfb16_bmove(struct display *p, int sy, int sx, int dy,
-			      int dx, int height, int width);
-extern void fbcon_cfb16_clear(struct vc_data *conp, struct display *p, int sy,
-			      int sx, int height, int width);
-extern void fbcon_cfb16_putc(struct vc_data *conp, struct display *p, int c,
-			     int yy, int xx);
-extern void fbcon_cfb16_putcs(struct vc_data *conp, struct display *p,
-			      const unsigned short *s, int count, int yy, int xx);
-extern void fbcon_cfb16_revc(struct display *p, int xx, int yy);
-extern void fbcon_cfb16_clear_margins(struct vc_data *conp, struct display *p,
-				      int bottom_only);
-
-#endif /* _VIDEO_FBCON_CFB16_H */
diff --git a/include/video/fbcon-cfb2.h b/include/video/fbcon-cfb2.h
deleted file mode 100644
index 5ba68a5f0a4f9debaba2c824a687eeac785033e0..0000000000000000000000000000000000000000
--- a/include/video/fbcon-cfb2.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- *  FBcon low-level driver for 2 bpp packed pixel (cfb2)
- */
-
-#ifndef _VIDEO_FBCON_CFB2_H
-#define _VIDEO_FBCON_CFB2_H
-
-#include <linux/config.h>
-
-#ifdef MODULE
-#if defined(CONFIG_FBCON_CFB2) || defined(CONFIG_FBCON_CFB2_MODULE)
-#define FBCON_HAS_CFB2
-#endif
-#else
-#if defined(CONFIG_FBCON_CFB2)
-#define FBCON_HAS_CFB2
-#endif
-#endif
-
-extern struct display_switch fbcon_cfb2;
-extern void fbcon_cfb2_setup(struct display *p);
-extern void fbcon_cfb2_bmove(struct display *p, int sy, int sx, int dy, int dx,
-			     int height, int width);
-extern void fbcon_cfb2_clear(struct vc_data *conp, struct display *p, int sy,
-			     int sx, int height, int width);
-extern void fbcon_cfb2_putc(struct vc_data *conp, struct display *p, int c,
-			    int yy, int xx);
-extern void fbcon_cfb2_putcs(struct vc_data *conp, struct display *p,
-			     const unsigned short *s, int count, int yy, int xx);
-extern void fbcon_cfb2_revc(struct display *p, int xx, int yy);
-
-#endif /* _VIDEO_FBCON_CFB2_H */
diff --git a/include/video/fbcon-cfb24.h b/include/video/fbcon-cfb24.h
deleted file mode 100644
index 77442e22d2afded0ee7a0187767cc60536f3dc38..0000000000000000000000000000000000000000
--- a/include/video/fbcon-cfb24.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- *  FBcon low-level driver for 24 bpp packed pixel (cfb24)
- */
-
-#ifndef _VIDEO_FBCON_CFB24_H
-#define _VIDEO_FBCON_CFB24_H
-
-#include <linux/config.h>
-
-#ifdef MODULE
-#if defined(CONFIG_FBCON_CFB24) || defined(CONFIG_FBCON_CFB24_MODULE)
-#define FBCON_HAS_CFB24
-#endif
-#else
-#if defined(CONFIG_FBCON_CFB24)
-#define FBCON_HAS_CFB24
-#endif
-#endif
-
-extern struct display_switch fbcon_cfb24;
-extern void fbcon_cfb24_setup(struct display *p);
-extern void fbcon_cfb24_bmove(struct display *p, int sy, int sx, int dy,
-			      int dx, int height, int width);
-extern void fbcon_cfb24_clear(struct vc_data *conp, struct display *p, int sy,
-			      int sx, int height, int width);
-extern void fbcon_cfb24_putc(struct vc_data *conp, struct display *p, int c,
-			     int yy, int xx);
-extern void fbcon_cfb24_putcs(struct vc_data *conp, struct display *p,
-			      const unsigned short *s, int count, int yy, int xx);
-extern void fbcon_cfb24_revc(struct display *p, int xx, int yy);
-extern void fbcon_cfb24_clear_margins(struct vc_data *conp, struct display *p,
-				      int bottom_only);
-
-#endif /* _VIDEO_FBCON_CFB24_H */
diff --git a/include/video/fbcon-cfb32.h b/include/video/fbcon-cfb32.h
deleted file mode 100644
index abac3baa2f37e1fdbff8547cf319092cfc8d8ef4..0000000000000000000000000000000000000000
--- a/include/video/fbcon-cfb32.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- *  FBcon low-level driver for 32 bpp packed pixel (cfb32)
- */
-
-#ifndef _VIDEO_FBCON_CFB32_H
-#define _VIDEO_FBCON_CFB32_H
-
-#include <linux/config.h>
-
-#ifdef MODULE
-#if defined(CONFIG_FBCON_CFB32) || defined(CONFIG_FBCON_CFB32_MODULE)
-#define FBCON_HAS_CFB32
-#endif
-#else
-#if defined(CONFIG_FBCON_CFB32)
-#define FBCON_HAS_CFB32
-#endif
-#endif
-
-extern struct display_switch fbcon_cfb32;
-extern void fbcon_cfb32_setup(struct display *p);
-extern void fbcon_cfb32_bmove(struct display *p, int sy, int sx, int dy,
-			      int dx, int height, int width);
-extern void fbcon_cfb32_clear(struct vc_data *conp, struct display *p, int sy,
-			      int sx, int height, int width);
-extern void fbcon_cfb32_putc(struct vc_data *conp, struct display *p, int c,
-			     int yy, int xx);
-extern void fbcon_cfb32_putcs(struct vc_data *conp, struct display *p,
-			      const unsigned short *s, int count, int yy, int xx);
-extern void fbcon_cfb32_revc(struct display *p, int xx, int yy);
-extern void fbcon_cfb32_clear_margins(struct vc_data *conp, struct display *p,
-				      int bottom_only);
-
-#endif /* _VIDEO_FBCON_CFB32_H */
diff --git a/include/video/fbcon-cfb4.h b/include/video/fbcon-cfb4.h
deleted file mode 100644
index 963befe5ca1e75a5fce27c2625513db4a47a8e43..0000000000000000000000000000000000000000
--- a/include/video/fbcon-cfb4.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- *  FBcon low-level driver for 4 bpp packed pixel (cfb4)
- */
-
-#ifndef _VIDEO_FBCON_CFB4_H
-#define _VIDEO_FBCON_CFB4_H
-
-#include <linux/config.h>
-
-#ifdef MODULE
-#if defined(CONFIG_FBCON_CFB4) || defined(CONFIG_FBCON_CFB4_MODULE)
-#define FBCON_HAS_CFB4
-#endif
-#else
-#if defined(CONFIG_FBCON_CFB4)
-#define FBCON_HAS_CFB4
-#endif
-#endif
-
-extern struct display_switch fbcon_cfb4;
-extern void fbcon_cfb4_setup(struct display *p);
-extern void fbcon_cfb4_bmove(struct display *p, int sy, int sx, int dy, int dx,
-			     int height, int width);
-extern void fbcon_cfb4_clear(struct vc_data *conp, struct display *p, int sy,
-			     int sx, int height, int width);
-extern void fbcon_cfb4_putc(struct vc_data *conp, struct display *p, int c,
-			    int yy, int xx);
-extern void fbcon_cfb4_putcs(struct vc_data *conp, struct display *p,
-			     const unsigned short *s, int count, int yy, int xx);
-extern void fbcon_cfb4_revc(struct display *p, int xx, int yy);
-
-#endif /* _VIDEO_FBCON_CFB4_H */
diff --git a/include/video/fbcon-cfb8.h b/include/video/fbcon-cfb8.h
deleted file mode 100644
index 96189d0acd277637b885b5ea6e3806b95aaf0931..0000000000000000000000000000000000000000
--- a/include/video/fbcon-cfb8.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- *  FBcon low-level driver for 8 bpp packed pixel (cfb8)
- */
-
-#ifndef _VIDEO_FBCON_CFB8_H
-#define _VIDEO_FBCON_CFB8_H
-
-#include <linux/config.h>
-
-#ifdef MODULE
-#if defined(CONFIG_FBCON_CFB8) || defined(CONFIG_FBCON_CFB8_MODULE)
-#define FBCON_HAS_CFB8
-#endif
-#else
-#if defined(CONFIG_FBCON_CFB8)
-#define FBCON_HAS_CFB8
-#endif
-#endif
-
-extern struct display_switch fbcon_cfb8;
-extern void fbcon_cfb8_setup(struct display *p);
-extern void fbcon_cfb8_bmove(struct display *p, int sy, int sx, int dy, int dx,
-			     int height, int width);
-extern void fbcon_cfb8_clear(struct vc_data *conp, struct display *p, int sy,
-			     int sx, int height, int width);
-extern void fbcon_cfb8_putc(struct vc_data *conp, struct display *p, int c,
-			    int yy, int xx);
-extern void fbcon_cfb8_putcs(struct vc_data *conp, struct display *p,
-			     const unsigned short *s, int count, int yy, int xx);
-extern void fbcon_cfb8_revc(struct display *p, int xx, int yy);
-extern void fbcon_cfb8_clear_margins(struct vc_data *conp, struct display *p,
-				     int bottom_only);
-
-#endif /* _VIDEO_FBCON_CFB8_H */
diff --git a/include/video/fbcon-mac.h b/include/video/fbcon-mac.h
deleted file mode 100644
index b275ff91b82473633520771005b34a59a5faf9c7..0000000000000000000000000000000000000000
--- a/include/video/fbcon-mac.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- *  FBcon low-level driver for Mac variable bpp packed pixels (mac)
- */
-
-#ifndef _VIDEO_FBCON_MAC_H
-#define _VIDEO_FBCON_MAC_H
-
-#include <linux/config.h>
-
-#ifdef MODULE
-#if defined(CONFIG_FBCON_MAC) || defined(CONFIG_FBCON_MAC_MODULE)
-#define FBCON_HAS_MAC
-#endif
-#else
-#if defined(CONFIG_FBCON_MAC)
-#define FBCON_HAS_MAC
-#endif
-#endif
-
-extern struct display_switch fbcon_mac;
-extern void fbcon_mac_setup(struct display *p);
-extern void fbcon_mac_bmove(struct display *p, int sy, int sx, int dy, int dx,
-			    int height, int width);
-extern void fbcon_mac_clear(struct vc_data *conp, struct display *p, int sy,
-			    int sx, int height, int width);
-extern void fbcon_mac_putc(struct vc_data *conp, struct display *p, int c,
-			   int yy, int xx);
-extern void fbcon_mac_putcs(struct vc_data *conp, struct display *p,
-			    const unsigned short *s, int count, int yy, int xx);
-extern void fbcon_mac_revc(struct display *p, int xx, int yy);
-
-#endif /* _VIDEO_FBCON_MAC_H */
diff --git a/include/video/fbcon-vga-planes.h b/include/video/fbcon-vga-planes.h
index 31578d41c58f720e5a71a9f90d79c14d0d9032d9..e9e0f3c4d7fa5e6b8492a6740fad840e4a17d083 100644
--- a/include/video/fbcon-vga-planes.h
+++ b/include/video/fbcon-vga-planes.h
@@ -18,6 +18,7 @@
 #endif
 
 extern struct display_switch fbcon_vga_planes;
+extern struct display_switch fbcon_vga8_planes;
 extern struct display_switch fbcon_ega_planes;
 extern void fbcon_vga_planes_setup(struct display *p);
 extern void fbcon_vga_planes_bmove(struct display *p, int sy, int sx, int dy, int dx,
diff --git a/include/video/fbcon.h b/include/video/fbcon.h
index c28fea0c10c3637f5803ae78da4e9372dec63ec4..10ca672e0d6520192e5d1dc39527f0819993c0e4 100644
--- a/include/video/fbcon.h
+++ b/include/video/fbcon.h
@@ -18,6 +18,7 @@
 
 #include <asm/io.h>
 
+struct display;
 
     /*                                  
      *  `switch' for the Low Level Operations
@@ -51,10 +52,6 @@ extern struct display_switch fbcon_dummy;
 
 struct display {
     /* Filled in by the frame buffer device */
-
-    struct fb_var_screeninfo var;   /* variable infos. yoffset and vmode */
-                                    /* are updated by fbcon.c */
-    struct fb_cmap cmap;            /* colormap */
     u_short can_soft_blank;         /* zero if no hardware blanking */
     u_short inverse;                /* != 0 text black on white as default */
     struct display_switch *dispsw;  /* low level operations */
@@ -184,44 +181,6 @@ extern int set_all_vcs(int fbidx, struct fb_ops *fb,
 /* Namespace consistency */
 #define SCROLL_YNOPARTIAL	__SCROLL_YNOPARTIAL
 
-
-#if defined(__sparc__)
-
-/* We map all of our framebuffers such that big-endian accesses
- * are what we want, so the following is sufficient.
- */
-
-#define fb_readb sbus_readb
-#define fb_readw sbus_readw
-#define fb_readl sbus_readl
-#define fb_writeb sbus_writeb
-#define fb_writew sbus_writew
-#define fb_writel sbus_writel
-#define fb_memset sbus_memset_io
-
-#elif defined(__i386__) || defined(__alpha__) || defined(__x86_64__)
-
-#define fb_readb __raw_readb
-#define fb_readw __raw_readw
-#define fb_readl __raw_readl
-#define fb_writeb __raw_writeb
-#define fb_writew __raw_writew
-#define fb_writel __raw_writel
-#define fb_memset memset_io
-
-#else
-
-#define fb_readb(addr) (*(volatile u8 *) (addr))
-#define fb_readw(addr) (*(volatile u16 *) (addr))
-#define fb_readl(addr) (*(volatile u32 *) (addr))
-#define fb_writeb(b,addr) (*(volatile u8 *) (addr) = (b))
-#define fb_writew(b,addr) (*(volatile u16 *) (addr) = (b))
-#define fb_writel(b,addr) (*(volatile u32 *) (addr) = (b))
-#define fb_memset memset
-
-#endif
-
-
 extern void fbcon_redraw_clear(struct vc_data *, struct display *, int, int, int, int);
 extern void fbcon_redraw_bmove(struct display *, int, int, int, int, int, int);