]> git.neil.brown.name Git - history.git/commitdiff
More drivers ported over to the new api. Also a bug fix in the software drawing image...
authorJames Simmons <jsimmons@heisenberg.transvirtual.com>
Tue, 28 May 2002 03:12:34 +0000 (20:12 -0700)
committerJames Simmons <jsimmons@heisenberg.transvirtual.com>
Tue, 28 May 2002 03:12:34 +0000 (20:12 -0700)
drivers/video/Config.in
drivers/video/cfbimgblt.c
drivers/video/clps711xfb.c
drivers/video/hpfb.c

index 0cbc2918bf5faaa3b154f0dba21d250b7d79e5f1..0455c2011c605ce5fc4eee99bf8fa3688d818f62 100644 (file)
@@ -236,29 +236,25 @@ if [ "$CONFIG_FB" = "y" ]; then
       if [ "$CONFIG_FB_ACORN" = "y" -o "$CONFIG_FB_AMIGA" = "y" -o \
           "$CONFIG_FB_ATARI" = "y" -o "$CONFIG_FB_CYBER" = "y" -o \
           "$CONFIG_FB_MAC" = "y" -o "$CONFIG_FB_RETINAZ3" = "y" -o \
-          "$CONFIG_FB_VIRGE" = "y" -o "$CONFIG_FB_VIRTUAL" = "y" -o \
-          "$CONFIG_FB_BWTWO" = "y" -o "$CONFIG_FB_CLGEN" = "y"  -o \
-          "$CONFIG_FB_TX3912" = "y" ]; then
+          "$CONFIG_FB_VIRGE" = "y" -o "$CONFIG_FB_TX3912" = "y" -o \
+          "$CONFIG_FB_BWTWO" = "y" -o "$CONFIG_FB_CLGEN" = "y" ]; then 
         define_tristate CONFIG_FBCON_MFB y
       else
         if [ "$CONFIG_FB_ACORN" = "m" -o "$CONFIG_FB_AMIGA" = "m" -o \
              "$CONFIG_FB_ATARI" = "m" -o "$CONFIG_FB_CYBER" = "m" -o \
              "$CONFIG_FB_MAC" = "m" -o "$CONFIG_FB_RETINAZ3" = "m" -o \
-             "$CONFIG_FB_VIRGE" = "m" -o "$CONFIG_FB_VIRTUAL" = "m" -o \
-             "$CONFIG_FB_BWTWO" = "m" -o "$CONFIG_FB_CLGEN" = "m" -o \
-             "$CONFIG_FB_TX3912" = "m" ]; then
+             "$CONFIG_FB_VIRGE" = "m" -o "$CONFIG_FB_TX3912" = "m" -o \
+             "$CONFIG_FB_BWTWO" = "m" -o "$CONFIG_FB_CLGEN" = "m" ]; then 
            define_tristate CONFIG_FBCON_MFB m
         fi
       fi
       if [ "$CONFIG_FB_ACORN" = "y" -o "$CONFIG_FB_MAC" = "y" -o \
-          "$CONFIG_FB_SA1100" = "y" -o "$CONFIG_FB_VIRTUAL" = "y" -o \
-          "$CONFIG_FB_TX3912" = "y" ]; then
+          "$CONFIG_FB_SA1100" = "y" -o "$CONFIG_FB_TX3912" = "y" ]; then 
         define_tristate CONFIG_FBCON_CFB2 y
         define_tristate CONFIG_FBCON_CFB4 y
       else
         if [ "$CONFIG_FB_ACORN" = "m" -o "$CONFIG_FB_MAC" = "m" -o \
-             "$CONFIG_FB_SA1100" = "m" -o "$CONFIG_FB_VIRTUAL" = "m" -o \
-             "$CONFIG_FB_TX3912" = "m" ]; then
+             "$CONFIG_FB_SA1100" = "m" -o "$CONFIG_FB_TX3912" = "m" ]; then 
            define_tristate CONFIG_FBCON_CFB2 m
            define_tristate CONFIG_FBCON_CFB4 m
         fi
@@ -375,14 +371,16 @@ if [ "$CONFIG_FB" = "y" ]; then
            define_tristate CONFIG_FBCON_CFB32 m
         fi
       fi
-      if [ "$CONFIG_FB_VESA" = "y" -o "$CONFIG_FB_Q40" = "y" -o \
+      if [ "$CONFIG_FB_NEOMAGIC" = "y" -o "$CONFIG_FB_VESA" = "y" -o \
           "$CONFIG_FB_FM2" = "y" -o "$CONFIG_FB_HIT" = "y" -o \
+          "$CONFIG_FB_HP300" = "y" -o "$CONFIG_FB_Q40" = "y" -o \
           "$CONFIG_FB_ANAKIN" = "y" -o "$CONFIG_FB_G364" = "y" -o \
-          "$CONFIG_FB_VIRTUAL" = "y" ]; then
+          "$CONFIG_FB_VIRTUAL" = "y" -o "$CONFIG_FB_CLPS711X" = "y" ]; then
         define_tristate CONFIG_FBCON_ACCEL y
       else
-        if [ "$CONFIG_FB_HIT" = "m" -o "$CONFIG_FB_G364" = "m" -o \
-             "$CONFIG_FB_VIRTUAL" = "m" ]; 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" ]; then 
            define_tristate CONFIG_FBCON_ACCEL m
          fi       
       fi
index 587b9af767337127b4e078131d46c22a71519606..38d7f0a3cb8247f6701ac699b099c03c84f9e33f 100644 (file)
@@ -46,7 +46,7 @@ void cfb_imageblit(struct fb_info *p, struct fb_image *image)
        int pad, ppw, shift, shift_right, shift_left, x2, y2, n, i, j, k, l = 7;
        unsigned long tmp = ~0 << (BITS_PER_LONG - p->var.bits_per_pixel);
        unsigned long fgx, bgx, fgcolor, bgcolor, eorx; 
-       unsigned long end_index, end_mask, mask;
+       unsigned long end_index, end_mask;
        unsigned long *dst = NULL;
        u8 *dst1, *src;
 
@@ -89,24 +89,45 @@ void cfb_imageblit(struct fb_info *p, struct fb_image *image)
                eorx = fgx ^ bgx;
                n = ((image->width + 7) >> 3);
                pad = (n << 3) - image->width;
+               n = image->width % ppw;
 
                for (i = 0; i < image->height; i++) {
                        dst = (unsigned long *) dst1;
                
                        for (j = image->width/ppw; j > 0; j--) {
-                               mask = 0;
+                               end_mask = 0;
                
                                for (k = ppw; k > 0; k--) {     
                                        if (test_bit(l, src))
-                                               mask |= (tmp >> (p->var.bits_per_pixel*(k-1)));
+                                               end_mask |= (tmp >> (p->var.bits_per_pixel*(k-1)));
                                        l--;
                                        if (l < 0) { l = 7; src++; }
                                }
-                               fb_writel((mask & eorx)^bgx, dst);
+                               fb_writel((end_mask & eorx)^bgx, dst);
                                dst++;
                        }
-                       l =- pad;               
+               
+                       if (n) {        
+                               for (j = n; j > 0; j--) {
+                                       end_mask = 0;
+       
+                                       if (test_bit(l, src))
+                                               end_mask |= (tmp >> (p->var.bits_per_pixel*(k-1)));
+                                       l--;
+                                       if (l < 0) { l = 7; src++; }
+                               }
+                               fb_writel((end_mask & eorx)^bgx, dst);
+                               dst++;
+                       }
+                       l -= pad;               
                        dst1 += p->fix.line_length;     
                }       
+       } else {
+               /* Draw the penguin */
+               n = ((image->width * p->var.bits_per_pixel) >> 3);
+               //shift = ((unsigned long) dst1 & (bpl -1));            
+               end_mask = 0;
+       
+       //      n = n/bpl;
        }
 }
index 44c58097ad22c3fd24ffcbb4374a774cbec5ddd5..434b32fae421be742cd95cd17b275f567e861d02 100644 (file)
@@ -27,7 +27,6 @@
 #include <linux/proc_fs.h>
 
 #include <video/fbcon.h>
-#include <video/fbcon-cfb4.h>
 
 #include <asm/hardware.h>
 #include <asm/mach-types.h>
@@ -87,42 +86,13 @@ clps7111fb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
 
        return 0;
 }
-                   
+
 /*
- *    Set the User Defined Part of the Display
- */
+ * Validate the purposed mode.
+ */    
 static int
-clps7111fb_set_var(struct fb_var_screeninfo *var, int con,
-                  struct fb_info *info)
+clps7111fb_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
 {
-       struct display *display;
-       unsigned int lcdcon, syscon;
-       int chgvar = 0;
-
-       if (var->activate & FB_ACTIVATE_TEST)
-               return 0;
-
-       if ((var->activate & FB_ACTIVATE_MASK) != FB_ACTIVATE_NOW)
-               return -EINVAL;
-
-       if (info->var.xres != var->xres)
-               chgvar = 1;
-       if (info->var.yres != var->yres)
-               chgvar = 1;
-       if (info->var.xres_virtual != var->xres_virtual)
-               chgvar = 1;
-       if (info->var.yres_virtual != var->yres_virtual)
-               chgvar = 1;
-       if (info->var.bits_per_pixel != var->bits_per_pixel)
-               chgvar = 1;
-
-       if (con < 0) {
-               display = info->disp;
-               chgvar = 0;
-       } else {
-               display = fb_display + con;
-       }
-
        var->transp.msb_right   = 0;
        var->transp.offset      = 0;
        var->transp.length      = 0;
@@ -132,70 +102,37 @@ clps7111fb_set_var(struct fb_var_screeninfo *var, int con,
        var->green              = var->red;
        var->blue               = var->red;
 
+       if (var->bits_per_pixel > 4) 
+               return -EINVAL;
+}
+
+/*
+ * Set the hardware state.
+ */ 
+static int 
+clps7111fb_set_par(struct fb_info *info)
+{
+       unsigned int lcdcon, syscon;
+
        switch (var->bits_per_pixel) {
-#ifdef FBCON_HAS_MFB
        case 1:
                info->fix.visual        = FB_VISUAL_MONO01;
-               display->dispsw         = &fbcon_mfb;
-               display->dispsw_data    = NULL;
                break;
-#endif
-#ifdef FBCON_HAS_CFB2
        case 2:
                info->fix.visual        = FB_VISUAL_PSEUDOCOLOR;
-               display->dispsw         = &fbcon_cfb2;
-               display->dispsw_data    = NULL;
                break;
-#endif
-#ifdef FBCON_HAS_CFB4
        case 4:
                info->fix.visual        = FB_VISUAL_PSEUDOCOLOR;
-               display->dispsw         = &fbcon_cfb4;
-               display->dispsw_data    = NULL;
                break;
-#endif
-       default:
-               return -EINVAL;
        }
 
-       display->next_line      = var->xres_virtual * var->bits_per_pixel / 8;
-
-       info->fix.line_length = display->next_line;
-
-       display->line_length    = info->fix.line_length;
-       display->visual         = info->fix.visual;
-       display->type           = info->fix.type;
-       display->type_aux       = info->fix.type_aux;
-       display->ypanstep       = info->fix.ypanstep;
-       display->ywrapstep      = info->fix.ywrapstep;
-       display->can_soft_blank = 1;
-       display->inverse        = 0;
-
-       info->var               = *var;
-       info->var.activate      &= ~FB_ACTIVATE_ALL;
-
-       /*
-        * Update the old var.  The fbcon drivers still use this.
-        * Once they are using cfb->var, this can be dropped.
-        *                                      --rmk
-        */
-       display->var            = info->var;
-
-       /*
-        * If we are setting all the virtual consoles, also set the
-        * defaults used to create new consoles.
-        */
-       if (var->activate & FB_ACTIVATE_ALL)
-               info->disp->var = info->var;
-
-       if (chgvar && info && info->changevar)
-               info->changevar(con);
+       info->fix.line_length = info->var.xres_virtual * info->var.bits_per_pixel / 8;
 
        /*
         * LCDCON must only be changed while the LCD is disabled
         */
-       lcdcon = (var->xres_virtual * var->yres_virtual * var->bits_per_pixel) / 128 - 1;
-       lcdcon |= ((var->xres_virtual / 16) - 1) << 13;
+       lcdcon = (info->var.xres_virtual * info->var.yres_virtual * info->var.bits_per_pixel) / 128 - 1;
+       lcdcon |= ((info->var.xres_virtual / 16) - 1) << 13;
        lcdcon |= 2 << 19;
        lcdcon |= 13 << 25;
        lcdcon |= LCDCON_GSEN;
@@ -205,9 +142,6 @@ clps7111fb_set_var(struct fb_var_screeninfo *var, int con,
        clps_writel(syscon & ~SYSCON1_LCDEN, SYSCON1);
        clps_writel(lcdcon, LCDCON);
        clps_writel(syscon | SYSCON1_LCDEN, SYSCON1);
-
-       fb_set_cmap(&info->cmap, 1, info);
-
        return 0;
 }
 
@@ -260,7 +194,9 @@ static int clps7111fb_blank(int blank, struct fb_info *info)
 
 static struct fb_ops clps7111fb_ops = {
        owner:          THIS_MODULE,
-       fb_set_var:     clps7111fb_set_var,
+       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_fix:     gen_get_fix,
        fb_get_var:     gen_get_var,
@@ -269,50 +205,6 @@ static struct fb_ops clps7111fb_ops = {
        fb_blank:       clps7111fb_blank,
 };
 
-static int clps7111fb_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 video 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 video mode.  By default,
-        * fbcon sets all the colormaps and video modes to the default
-        * values at bootup.
-        */
-       if (disp->cmap.len)
-               cmap = &disp->cmap;
-       else
-               cmap = fb_default_cmap(CMAP_SIZE);
-
-       fb_copy_cmap(cmap, &info->cmap, 0);
-
-       info->var = disp->var;
-       info->var.activate = FB_ACTIVATE_NOW;
-
-       clps7111fb_set_var(&info->var, con, info);
-
-       return 0;
-}
-
-static int clps7111fb_updatevar(int con, struct fb_info *info)
-{
-       return -EINVAL;
-}
-
 static int 
 clps7111fb_proc_backlight_read(char *page, char **start, off_t off,
                int count, int *eof, void *data)
@@ -395,8 +287,8 @@ int __init clps711xfb_init(void)
 
        cfb->fbops              = &clps7111fb_ops;
        cfb->changevar  = NULL;
-       cfb->switch_con = clps7111fb_switch;
-       cfb->updatevar  = clps7111fb_updatevar;
+       cfb->switch_con = gen_switch;
+       cfb->updatevar  = gen_update_var;
        cfb->flags              = FBINFO_FLAG_DEFAULT;
        cfb->disp               = (struct display *)(cfb + 1);
 
@@ -439,7 +331,7 @@ int __init clps711xfb_init(void)
                clps_writeb(clps_readb(PDDR) | EDB_PD3_LCDBL, PDDR);
        }
 
-       clps7111fb_set_var(&cfb->var, -1, cfb);
+       gen_set_var(&cfb->var, -1, cfb);
        err = register_framebuffer(cfb);
 
 out:   return err;
index 026a6cc4ab982a811f1191278b2502d09dd5282d..d06782d6857bb5d0c68bd77312609f20ee6384c8 100644 (file)
@@ -1,9 +1,6 @@
 /*
  *     HP300 Topcat framebuffer support (derived from macfb of all things)
  *     Phil Blundell <philb@gnu.org> 1998
- * 
- * Should this be moved to drivers/dio/video/ ? -- Peter Maydell
- * No! -- Jes
  */
 
 #include <linux/module.h>
 #include <asm/hwtest.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>
 
-static struct display disp;
 static struct fb_info fb_info;
 
-unsigned long fb_start, fb_size = 1024*768, fb_line_length = 1024;
 unsigned long fb_regs;
 unsigned char fb_bitmask;
 
@@ -51,216 +42,77 @@ unsigned char fb_bitmask;
 #define WWIDTH         0x4102
 #define WMOVE          0x409c
 
-static struct fb_var_screeninfo hpfb_defined = {
-       0,0,0,0,        /* W,H, W, H (virtual) load xres,xres_virtual*/
-       0,0,            /* virtual -> visible no offset */
-       0,              /* depth -> load bits_per_pixel */
-       0,              /* greyscale ? */
-       {0,2,0},        /* R */
-       {0,2,0},        /* G */
-       {0,2,0},        /* B */
-       {0,0,0},        /* transparency */
-       0,              /* standard pixel format */
-       FB_ACTIVATE_NOW,
-       274,195,        /* 14" monitor */
-       FB_ACCEL_NONE,
-       0L,0L,0L,0L,0L,
-       0L,0L,0,        /* No sync info */
-       FB_VMODE_NONINTERLACED,
-       {0,0,0,0,0,0}
-};
+static struct fb_fix_screeninfo hpfb_fix __initdata = {
+       id:             "HP300 Topcat",
+       smem_len:       1024*768,
+       type:           FB_TYPE_PACKED_PIXELS,
+       visual:         FB_VISUAL_PSEUDOCOLOR,
+       line_length:    1024,
+       accel:          FB_ACCEL_NONE,
 
-struct hpfb_par
-{
+static struct fb_var_screeninfo hpfb_defined = {
+       xres:           1024,
+       yres:           768,
+       xres_virtual:   1024,
+       yres_virtual:   786,
+       bits_per_pixel: 1,
+       red:            {0,2,0},        /* R */
+       green:          {0,2,0},        /* G */
+       blue:           {0,2,0},        /* B */
+       activate:       FB_ACTIVATE_NOW,
+       height:         274,
+       width:          195,    /* 14" monitor */
+       accel_flags:    FB_ACCEL_NONE,
+       vmode:          FB_VMODE_NONINTERLACED,
 };
 
-struct hpfb_par current_par;
-
-static void hpfb_encode_var(struct fb_var_screeninfo *var, 
-                               struct hpfb_par *par)
-{
-       int i=0;
-       var->xres=1024;
-       var->yres=768;
-       var->xres_virtual=1024;
-       var->yres_virtual=768;
-       var->xoffset=0;
-       var->yoffset=0;
-       var->bits_per_pixel = 1;
-       var->grayscale=0;
-       var->transp.offset=0;
-       var->transp.length=0;
-       var->transp.msb_right=0;
-       var->nonstd=0;
-       var->activate=0;
-       var->height= -1;
-       var->width= -1;
-       var->vmode=FB_VMODE_NONINTERLACED;
-       var->pixclock=0;
-       var->sync=0;
-       var->left_margin=0;
-       var->right_margin=0;
-       var->upper_margin=0;
-       var->lower_margin=0;
-       var->hsync_len=0;
-       var->vsync_len=0;
-       for(i=0;i<ARRAY_SIZE(var->reserved);i++)
-               var->reserved[i]=0;
-}
-
-static void hpfb_get_par(struct hpfb_par *par)
-{
-       *par=current_par;
-}
-
-static int fb_update_var(int con, struct fb_info *info)
-{
-       return 0;
-}
-
-static int do_fb_set_var(struct fb_var_screeninfo *var, int isactive)
-{
-       struct hpfb_par par;
-       
-       hpfb_get_par(&par);
-       hpfb_encode_var(var, &par);
-       return 0;
-}
-
-static int hpfb_get_cmap(struct fb_cmap *cmap, int kspc, int con,
-                         struct fb_info *info)
-{
-       return 0;
-}
+static struct display display;
 
 /*
- * Set the palette.  This may not work on all boards but only experimentation will tell.
+ * Set the palette.  This may not work on all boards but only experimentation 
+ * will tell.
  * XXX Doesn't work at all.
  */
-
-static int hpfb_set_cmap(struct fb_cmap *cmap, int kspc, int con,
-                         struct fb_info *info)
-{
-       unsigned int i;
-       for (i = 0; i < cmap->len; i++)
-       {
-               while (readw(fb_regs + 0x6002) & 0x4) udelay(1);
-               writew(0, fb_regs + 0x60f0);
-               writew(cmap->start + i, fb_regs + 0x60b8);
-               writew(cmap->red[i], fb_regs + 0x60b2);
-               writew(cmap->green[i], fb_regs + 0x60b4);
-               writew(cmap->blue[i], fb_regs + 0x60b6);
-               writew(0xff, fb_regs + 0x60f0);
-               udelay(100);
-       }
+static int hpfb_setcolreg(unsigned regno, unsigned red, unsigned green,
+                           unsigned blue, unsigned transp,
+                           struct fb_info *info)
+{
+       while (readw(fb_regs + 0x6002) & 0x4) udelay(1);
+       writew(0, fb_regs + 0x60f0);
+       writew(regno, fb_regs + 0x60b8);
+       writew(red, fb_regs + 0x60b2);
+       writew(green, fb_regs + 0x60b4);
+       writew(blue, fb_regs + 0x60b6);
+       writew(0xff, fb_regs + 0x60f0);
+       udelay(100);
        writew(0xffff, fb_regs + 0x60ba);
        return 0;
 }
 
-static int hpfb_get_var(struct fb_var_screeninfo *var, int con,
-                        struct fb_info *info)
-{
-       struct hpfb_par par;
-       if(con==-1)
-       {
-               hpfb_get_par(&par);
-               hpfb_encode_var(var, &par);
-       }
-       else
-               *var=fb_display[con].var;
-       return 0;
-}
-
-static int hpfb_set_var(struct fb_var_screeninfo *var, int con,
-                        struct fb_info *info)
-{
-       int err;
-       
-       if ((err=do_fb_set_var(var, 1)))
-               return err;
-       return 0;
-}
-
-static void hpfb_encode_fix(struct fb_fix_screeninfo *fix, 
-                               struct hpfb_par *par)
-{
-       memset(fix, 0, sizeof(struct fb_fix_screeninfo));
-       strcpy(fix->id, "HP300 Topcat");
-
-       /*
-        * X works, but screen wraps ... 
-        */
-       fix->smem_start=fb_start;
-       fix->smem_len=fb_size;
-       fix->type = FB_TYPE_PACKED_PIXELS;
-       fix->visual = FB_VISUAL_PSEUDOCOLOR;
-       fix->xpanstep=0;
-       fix->ypanstep=0;
-       fix->ywrapstep=0;
-       fix->line_length=fb_line_length;
-}
-
-static int hpfb_get_fix(struct fb_fix_screeninfo *fix, int con,
-                        struct fb_info *info)
-{
-       struct hpfb_par par;
-       hpfb_get_par(&par);
-       hpfb_encode_fix(fix, &par);
-       return 0;
-}
-
-static void topcat_blit(int x0, int y0, int x1, int y1, int w, int h)
+void hpfb_copyarea(struct fb_info *info, struct fb_copyarea *area) 
 {
        while (readb(fb_regs + BUSY) & fb_bitmask);
        writeb(0x3, fb_regs + WMRR);
-       writew(x0, fb_regs + SOURCE_X);
-       writew(y0, fb_regs + SOURCE_Y);
-       writew(x1, fb_regs + DEST_X);
-       writew(y1, fb_regs + DEST_Y);
-       writew(h, fb_regs + WHEIGHT);
-       writew(w, fb_regs + WWIDTH);
+       writew(area->sx, fb_regs + SOURCE_X);
+       writew(area->sy, fb_regs + SOURCE_Y);
+       writew(area->dx, fb_regs + DEST_X);
+       writew(area->dy, fb_regs + DEST_Y);
+       writew(area->height, fb_regs + WHEIGHT);
+       writew(area->width, fb_regs + WWIDTH);
        writeb(fb_bitmask, fb_regs + WMOVE);
 }
 
-static int hpfb_switch(int con, struct fb_info *info)
-{
-       do_fb_set_var(&fb_display[con].var,1);
-       info->currcon = con;
-       return 0;
-}
-
-static void hpfb_set_disp(int con)
-{
-       struct fb_fix_screeninfo fix;
-       struct display *display;
-       
-       if (con >= 0)
-               display = &fb_display[con];
-       else
-               display = &disp;        /* used during initialization */
-
-       hpfb_get_fix(&fix, con, 0);
-
-       display->visual = fix.visual;
-       display->type = fix.type;
-       display->type_aux = fix.type_aux;
-       display->ypanstep = fix.ypanstep;
-       display->ywrapstep = fix.ywrapstep;
-       display->line_length = fix.line_length;
-       display->next_line = fix.line_length;
-       display->can_soft_blank = 0;
-       display->inverse = 0;
-
-       display->dispsw = &fbcon_cfb8;
-}
-
 static struct fb_ops hpfb_ops = {
        owner:          THIS_MODULE,
-       fb_get_fix:     hpfb_get_fix,
-       fb_get_var:     hpfb_get_var,
-       fb_set_var:     hpfb_set_var,
-       fb_get_cmap:    hpfb_get_cmap,
-       fb_set_cmap:    hpfb_set_cmap,
+       fb_get_fix:     gen_get_fix,
+       fb_get_var:     gen_get_var,
+       fb_set_var:     gen_set_var,
+       fb_get_cmap:    gen_get_cmap,
+       fb_set_cmap:    gen_set_cmap,
+       fb_setcolreg:   hpfb_setcolreg,
+       fb_fillrect:    cfb_fillrect,
+       fb_copyarea:    hpfb_copyarea,
+       fb_imageblit:   cfb_imageblit,
 };
 
 #define TOPCAT_FBOMSB  0x5d
@@ -273,7 +125,7 @@ int __init hpfb_init_one(unsigned long base)
        fboff = (readb(base + TOPCAT_FBOMSB) << 8) 
                | readb(base + TOPCAT_FBOLSB);
 
-       fb_start = 0xf0000000 | (readb(base + fboff) << 16);
+       hpfb_fix.smem_start = 0xf0000000 | (readb(base + fboff) << 16);
        fb_regs = base;
 
 #if 0
@@ -285,17 +137,6 @@ int __init hpfb_init_one(unsigned long base)
        writeb(0, base+0x4516);
        writeb(0x90, base+0x4206);
 #endif
-
-       /*
-        *      Fill in the available video resolution
-        */
-        
-       hpfb_defined.xres = 1024;
-       hpfb_defined.yres = 768;
-       hpfb_defined.xres_virtual = 1024;
-       hpfb_defined.yres_virtual = 768;
-       hpfb_defined.bits_per_pixel = 8;
-
        /* 
         *      Give the hardware a bit of a prod and work out how many bits per
         *      pixel are supported.
@@ -303,8 +144,8 @@ int __init hpfb_init_one(unsigned long base)
        
        writeb(0xff, base + TC_WEN);
        writeb(0xff, base + TC_FBEN);
-       writeb(0xff, fb_start);
-       fb_bitmask = readb(fb_start);
+       writeb(0xff, hpfb_fix.smem_start);
+       fb_bitmask = readb(hpfb_fix.smem_start);
 
        /*
         *      Enable reading/writing of all the planes.
@@ -317,24 +158,25 @@ int __init hpfb_init_one(unsigned long base)
        /*
         *      Let there be consoles..
         */
-       strcpy(fb_info.modename, "Topcat");
-       fb_info.changevar = NULL;
-       fb_info.node = NODEV;
+       fb_info.node  = NODEV;
        fb_info.fbops = &hpfb_ops;
-       fb_info.screen_base = fb_start;
-       fb_info.disp = &disp;
-       fb_info.currcon = -1;
-       fb_info.switch_con = &hpfb_switch;
-       fb_info.updatevar = &fb_update_var;
        fb_info.flags = FBINFO_FLAG_DEFAULT;
-       do_fb_set_var(&hpfb_defined, 1);
+       fb_info.var   = hpfb_defined;
+       fb_info.fix   = hpfb_fix;
+       fb_info.screen_base = hpfb_fix.smem_start;
+
+       /* 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);
 
-       hpfb_get_var(&disp.var, -1, &fb_info);
-       hpfb_set_disp(-1);
+       gen_set_disp(-1, &fb_info);
 
        if (register_framebuffer(&fb_info) < 0)
                return 1;
-
        return 0;
 }
 
@@ -364,29 +206,25 @@ int __init hpfb_init(void)
         */
 #define INTFBADDR 0xf0560000
 
-       if (hwreg_present((void *)INTFBADDR) && (DIO_ID(INTFBADDR) == DIO_ID_FBUFFER)
-               && topcat_sid_ok(sid = DIO_SECID(INTFBADDR)))
-       {
+       if (hwreg_present((void *)INTFBADDR) && 
+          (DIO_ID(INTFBADDR) == DIO_ID_FBUFFER) &&
+           topcat_sid_ok(sid = DIO_SECID(INTFBADDR))) {
                printk("Internal Topcat found (secondary id %02x)\n", sid); 
                hpfb_init_one(INTFBADDR);
-       }
-       else
-       {
+       } else {
                int sc = dio_find(DIO_ID_FBUFFER);
-               if (sc)
-               {
+
+               if (sc) {
                        unsigned long addr = (unsigned long)dio_scodetoviraddr(sc);
                        unsigned int sid = DIO_SECID(addr);
 
-                       if (topcat_sid_ok(sid))
-                       {
+                       if (topcat_sid_ok(sid)) {
                                printk("Topcat found at DIO select code %02x "
-                                      "(secondary id %02x)\n", sc, sid);
+                                       "(secondary id %02x)\n", sc, sid);
                                hpfb_init_one(addr);
                        }
                }
        }
-
        return 0;
 }