fbdev: move FBIO_WAITFORVSYNC to linux/fb.h
[safe/jmp/linux-2.6] / drivers / video / cyber2000fb.c
index 55a3514..3a561df 100644 (file)
  * (which, incidentally, is about the same saving as a 2.5in hard disk
  * entering standby mode.)
  */
-#include <linux/config.h>
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/errno.h>
 #include <linux/string.h>
 #include <linux/mm.h>
-#include <linux/tty.h>
 #include <linux/slab.h>
 #include <linux/delay.h>
 #include <linux/fb.h>
 #include <linux/pci.h>
 #include <linux/init.h>
+#include <linux/io.h>
 
-#include <asm/io.h>
 #include <asm/pgtable.h>
 #include <asm/system.h>
-#include <asm/uaccess.h>
 
 #ifdef __arm__
 #include <asm/mach-types.h>
@@ -65,7 +62,7 @@ struct cfb_info {
        struct display_switch   *dispsw;
        struct display          *display;
        struct pci_dev          *dev;
-       unsigned char           __iomem *region;
+       unsigned char           __iomem *region;
        unsigned char           __iomem *regs;
        u_int                   id;
        int                     func_use_count;
@@ -100,11 +97,11 @@ MODULE_PARM_DESC(default_font, "Default font name");
 /*
  * Our access methods.
  */
-#define cyber2000fb_writel(val,reg,cfb)        writel(val, (cfb)->regs + (reg))
-#define cyber2000fb_writew(val,reg,cfb)        writew(val, (cfb)->regs + (reg))
-#define cyber2000fb_writeb(val,reg,cfb)        writeb(val, (cfb)->regs + (reg))
+#define cyber2000fb_writel(val, reg, cfb)      writel(val, (cfb)->regs + (reg))
+#define cyber2000fb_writew(val, reg, cfb)      writew(val, (cfb)->regs + (reg))
+#define cyber2000fb_writeb(val, reg, cfb)      writeb(val, (cfb)->regs + (reg))
 
-#define cyber2000fb_readb(reg,cfb)     readb((cfb)->regs + (reg))
+#define cyber2000fb_readb(reg, cfb)            readb((cfb)->regs + (reg))
 
 static inline void
 cyber2000_crtcw(unsigned int reg, unsigned int val, struct cfb_info *cfb)
@@ -224,12 +221,8 @@ cyber2000fb_copyarea(struct fb_info *info, const struct fb_copyarea *region)
 static void
 cyber2000fb_imageblit(struct fb_info *info, const struct fb_image *image)
 {
-//     struct cfb_info *cfb = (struct cfb_info *)info;
-
-//     if (!(cfb->fb.var.accel_flags & FB_ACCELF_TEXT)) {
-               cfb_imageblit(info, image);
-               return;
-//     }
+       cfb_imageblit(info, image);
+       return;
 }
 
 static int cyber2000fb_sync(struct fb_info *info)
@@ -280,12 +273,12 @@ cyber2000fb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
 
        /*
         * Pseudocolour:
-        *         8     8
+        *         8     8
         * pixel --/--+--/-->  red lut  --> red dac
-        *            |  8
-        *            +--/--> green lut --> green dac
-        *            |  8
-        *            +--/-->  blue lut --> blue dac
+        *            |  8
+        *            +--/--> green lut --> green dac
+        *            |  8
+        *            +--/-->  blue lut --> blue dac
         */
        case FB_VISUAL_PSEUDOCOLOR:
                if (regno >= NR_PALETTE)
@@ -295,9 +288,9 @@ cyber2000fb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
                green >>= 8;
                blue >>= 8;
 
-               cfb->palette[regno].red   = red;
+               cfb->palette[regno].red = red;
                cfb->palette[regno].green = green;
-               cfb->palette[regno].blue  = blue;
+               cfb->palette[regno].blue = blue;
 
                cyber2000fb_writeb(regno, 0x3c8, cfb);
                cyber2000fb_writeb(red, 0x3c9, cfb);
@@ -307,12 +300,12 @@ cyber2000fb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
 
        /*
         * Direct colour:
-        *          n     rl
-        *  pixel --/--+--/-->  red lut  --> red dac
-        *             |  gl
-        *             +--/--> green lut --> green dac
-        *             |  bl
-        *             +--/-->  blue lut --> blue dac
+        *         n     rl
+        * pixel --/--+--/-->  red lut  --> red dac
+        *            |  gl
+        *            +--/--> green lut --> green dac
+        *            |  bl
+        *            +--/-->  blue lut --> blue dac
         * n = bpp, rl = red length, gl = green length, bl = blue length
         */
        case FB_VISUAL_DIRECTCOLOR:
@@ -328,9 +321,11 @@ cyber2000fb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
                         * to the high 6 bits of the LUT.
                         */
                        cyber2000fb_writeb(regno << 2, 0x3c8, cfb);
-                       cyber2000fb_writeb(cfb->palette[regno >> 1].red, 0x3c9, cfb);
+                       cyber2000fb_writeb(cfb->palette[regno >> 1].red,
+                                          0x3c9, cfb);
                        cyber2000fb_writeb(green, 0x3c9, cfb);
-                       cyber2000fb_writeb(cfb->palette[regno >> 1].blue, 0x3c9, cfb);
+                       cyber2000fb_writeb(cfb->palette[regno >> 1].blue,
+                                          0x3c9, cfb);
 
                        green = cfb->palette[regno << 3].green;
 
@@ -338,9 +333,9 @@ cyber2000fb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
                }
 
                if (var->green.length >= 5 && regno < 32) {
-                       cfb->palette[regno << 3].red   = red;
+                       cfb->palette[regno << 3].red = red;
                        cfb->palette[regno << 3].green = green;
-                       cfb->palette[regno << 3].blue  = blue;
+                       cfb->palette[regno << 3].blue = blue;
 
                        /*
                         * The 5 bits of each colour component are
@@ -354,9 +349,9 @@ cyber2000fb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
                }
 
                if (var->green.length == 4 && regno < 16) {
-                       cfb->palette[regno << 4].red   = red;
+                       cfb->palette[regno << 4].red = red;
                        cfb->palette[regno << 4].green = green;
-                       cfb->palette[regno << 4].blue  = blue;
+                       cfb->palette[regno << 4].blue = blue;
 
                        /*
                         * The 5 bits of each colour component are
@@ -380,12 +375,12 @@ cyber2000fb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
 
        /*
         * True colour:
-        *          n     rl
-        *  pixel --/--+--/--> red dac
-        *             |  gl
-        *             +--/--> green dac
-        *             |  bl
-        *             +--/--> blue dac
+        *         n     rl
+        * pixel --/--+--/--> red dac
+        *            |  gl
+        *            +--/--> green dac
+        *            |  bl
+        *            +--/--> blue dac
         * n = bpp, rl = red length, gl = green length, bl = blue length
         */
        case FB_VISUAL_TRUECOLOR:
@@ -497,9 +492,9 @@ static void cyber2000fb_set_timing(struct cfb_info *cfb, struct par_info *hw)
 
        /* PLL registers */
        cyber2000_grphw(EXT_DCLK_MULT, hw->clock_mult, cfb);
-       cyber2000_grphw(EXT_DCLK_DIV,  hw->clock_div, cfb);
+       cyber2000_grphw(EXT_DCLK_DIV, hw->clock_div, cfb);
        cyber2000_grphw(EXT_MCLK_MULT, cfb->mclk_mult, cfb);
-       cyber2000_grphw(EXT_MCLK_DIV,  cfb->mclk_div, cfb);
+       cyber2000_grphw(EXT_MCLK_DIV, cfb->mclk_div, cfb);
        cyber2000_grphw(0x90, 0x01, cfb);
        cyber2000_grphw(0xb9, 0x80, cfb);
        cyber2000_grphw(0xb9, 0x00, cfb);
@@ -518,8 +513,8 @@ static void cyber2000fb_set_timing(struct cfb_info *cfb, struct par_info *hw)
        /*
         * Set up accelerator registers
         */
-       cyber2000fb_writew(hw->width,     CO_REG_SRC_WIDTH,  cfb);
-       cyber2000fb_writew(hw->width,     CO_REG_DEST_WIDTH, cfb);
+       cyber2000fb_writew(hw->width, CO_REG_SRC_WIDTH, cfb);
+       cyber2000fb_writew(hw->width, CO_REG_DEST_WIDTH, cfb);
        cyber2000fb_writeb(hw->co_pixfmt, CO_REG_PIXFMT, cfb);
 }
 
@@ -552,15 +547,15 @@ cyber2000fb_decode_crtc(struct par_info *hw, struct cfb_info *cfb,
 {
        u_int Htotal, Hblankend, Hsyncend;
        u_int Vtotal, Vdispend, Vblankstart, Vblankend, Vsyncstart, Vsyncend;
-#define BIT(v,b1,m,b2) (((v >> b1) & m) << b2)
+#define ENCODE_BIT(v, b1, m, b2) ((((v) >> (b1)) & (m)) << (b2))
 
        hw->crtc[13] = hw->pitch;
        hw->crtc[17] = 0xe3;
        hw->crtc[14] = 0;
        hw->crtc[8]  = 0;
 
-       Htotal      = var->xres + var->right_margin +
-                     var->hsync_len + var->left_margin;
+       Htotal     = var->xres + var->right_margin +
+                    var->hsync_len + var->left_margin;
 
        if (Htotal > 2080)
                return -EINVAL;
@@ -570,15 +565,15 @@ cyber2000fb_decode_crtc(struct par_info *hw, struct cfb_info *cfb,
        hw->crtc[2] = var->xres >> 3;
        hw->crtc[4] = (var->xres + var->right_margin) >> 3;
 
-       Hblankend   = (Htotal - 4*8) >> 3;
+       Hblankend   = (Htotal - 4 * 8) >> 3;
 
-       hw->crtc[3] = BIT(Hblankend,  0, 0x1f,  0) |
-                     BIT(1,          0, 0x01,  7);
+       hw->crtc[3] = ENCODE_BIT(Hblankend,  0, 0x1f,  0) |
+                     ENCODE_BIT(1,          0, 0x01,  7);
 
        Hsyncend    = (var->xres + var->right_margin + var->hsync_len) >> 3;
 
-       hw->crtc[5] = BIT(Hsyncend,   0, 0x1f,  0) |
-                     BIT(Hblankend,  5, 0x01,  7);
+       hw->crtc[5] = ENCODE_BIT(Hsyncend,   0, 0x1f,  0) |
+                     ENCODE_BIT(Hblankend,  5, 0x01,  7);
 
        Vdispend    = var->yres - 1;
        Vsyncstart  = var->yres + var->lower_margin;
@@ -593,20 +588,20 @@ cyber2000fb_decode_crtc(struct par_info *hw, struct cfb_info *cfb,
        Vblankend   = Vtotal - 10;
 
        hw->crtc[6]  = Vtotal;
-       hw->crtc[7]  = BIT(Vtotal,     8, 0x01,  0) |
-                       BIT(Vdispend,   8, 0x01,  1) |
-                       BIT(Vsyncstart, 8, 0x01,  2) |
-                       BIT(Vblankstart,8, 0x01,  3) |
-                       BIT(1,          0, 0x01,  4) |
-                       BIT(Vtotal,     9, 0x01,  5) |
-                       BIT(Vdispend,   9, 0x01,  6) |
-                       BIT(Vsyncstart, 9, 0x01,  7);
-       hw->crtc[9]  = BIT(0,          0, 0x1f,  0) |
-                       BIT(Vblankstart,9, 0x01,  5) |
-                       BIT(1,          0, 0x01,  6);
+       hw->crtc[7]  = ENCODE_BIT(Vtotal,     8, 0x01,  0) |
+                       ENCODE_BIT(Vdispend,   8, 0x01,  1) |
+                       ENCODE_BIT(Vsyncstart, 8, 0x01,  2) |
+                       ENCODE_BIT(Vblankstart, 8, 0x01,  3) |
+                       ENCODE_BIT(1,          0, 0x01,  4) |
+                       ENCODE_BIT(Vtotal,     9, 0x01,  5) |
+                       ENCODE_BIT(Vdispend,   9, 0x01,  6) |
+                       ENCODE_BIT(Vsyncstart, 9, 0x01,  7);
+       hw->crtc[9]  = ENCODE_BIT(0,          0, 0x1f,  0) |
+                       ENCODE_BIT(Vblankstart, 9, 0x01,  5) |
+                       ENCODE_BIT(1,          0, 0x01,  6);
        hw->crtc[10] = Vsyncstart;
-       hw->crtc[11] = BIT(Vsyncend,   0, 0x0f,  0) |
-                      BIT(1,          0, 0x01,  7);
+       hw->crtc[11] = ENCODE_BIT(Vsyncend,   0, 0x0f,  0) |
+                      ENCODE_BIT(1,          0, 0x01,  7);
        hw->crtc[12] = Vdispend;
        hw->crtc[15] = Vblankstart;
        hw->crtc[16] = Vblankend;
@@ -618,10 +613,10 @@ cyber2000fb_decode_crtc(struct par_info *hw, struct cfb_info *cfb,
         * 4=LINECOMP:10 5-IVIDEO 6=FIXCNT
         */
        hw->crtc_ofl =
-               BIT(Vtotal,     10, 0x01,  0) |
-               BIT(Vdispend,   10, 0x01,  1) |
-               BIT(Vsyncstart, 10, 0x01,  2) |
-               BIT(Vblankstart,10, 0x01,  3) |
+               ENCODE_BIT(Vtotal, 10, 0x01, 0) |
+               ENCODE_BIT(Vdispend, 10, 0x01, 1) |
+               ENCODE_BIT(Vsyncstart, 10, 0x01, 2) |
+               ENCODE_BIT(Vblankstart, 10, 0x01, 3) |
                EXT_CRT_VRTOFL_LINECOMP10;
 
        /* woody: set the interlaced bit... */
@@ -753,11 +748,11 @@ cyber2000fb_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
        var->red.msb_right      = 0;
        var->green.msb_right    = 0;
        var->blue.msb_right     = 0;
+       var->transp.offset      = 0;
+       var->transp.length      = 0;
 
        switch (var->bits_per_pixel) {
        case 8: /* PSEUDOCOLOUR, 256 */
-               var->transp.offset      = 0;
-               var->transp.length      = 0;
                var->red.offset         = 0;
                var->red.length         = 8;
                var->green.offset       = 0;
@@ -769,8 +764,6 @@ cyber2000fb_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
        case 16:/* DIRECTCOLOUR, 64k or 32k */
                switch (var->green.length) {
                case 6: /* RGB565, 64k */
-                       var->transp.offset      = 0;
-                       var->transp.length      = 0;
                        var->red.offset         = 11;
                        var->red.length         = 5;
                        var->green.offset       = 5;
@@ -781,8 +774,6 @@ cyber2000fb_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
 
                default:
                case 5: /* RGB555, 32k */
-                       var->transp.offset      = 0;
-                       var->transp.length      = 0;
                        var->red.offset         = 10;
                        var->red.length         = 5;
                        var->green.offset       = 5;
@@ -805,8 +796,6 @@ cyber2000fb_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
                break;
 
        case 24:/* TRUECOLOUR, 16m */
-               var->transp.offset      = 0;
-               var->transp.length      = 0;
                var->red.offset         = 16;
                var->red.length         = 8;
                var->green.offset       = 8;
@@ -833,7 +822,7 @@ cyber2000fb_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
        mem = var->xres_virtual * var->yres_virtual * (var->bits_per_pixel / 8);
        if (mem > cfb->fb.fix.smem_len)
                var->yres_virtual = cfb->fb.fix.smem_len * 8 /
-                       (var->bits_per_pixel * var->xres_virtual);
+                                   (var->bits_per_pixel * var->xres_virtual);
 
        if (var->yres > var->yres_virtual)
                var->yres = var->yres_virtual;
@@ -885,6 +874,8 @@ static int cyber2000fb_set_par(struct fb_info *info)
                default:
                        BUG();
                }
+               break;
+
        case 24:/* TRUECOLOUR, 16m */
                hw.co_pixfmt            = CO_PIXFMT_24BPP;
                hw.width                *= 3;
@@ -924,7 +915,7 @@ static int cyber2000fb_set_par(struct fb_info *info)
                hw.fetch <<= 1;
        hw.fetch += 1;
 
-       cfb->fb.fix.line_length = var->xres_virtual * var->bits_per_pixel / 8;
+       cfb->fb.fix.line_length = var->xres_virtual * var->bits_per_pixel / 8;
 
        /*
         * Same here - if the size of the video mode exceeds the
@@ -955,7 +946,6 @@ static int cyber2000fb_set_par(struct fb_info *info)
        return 0;
 }
 
-
 /*
  *    Pan or Wrap the Display
  */
@@ -1005,15 +995,15 @@ static int cyber2000fb_blank(int blank, struct fb_info *info)
        switch (blank) {
        case FB_BLANK_POWERDOWN:        /* powerdown - both sync lines down */
                sync = EXT_SYNC_CTL_VS_0 | EXT_SYNC_CTL_HS_0;
-               break;  
+               break;
        case FB_BLANK_HSYNC_SUSPEND:    /* hsync off */
                sync = EXT_SYNC_CTL_VS_NORMAL | EXT_SYNC_CTL_HS_0;
-               break;  
+               break;
        case FB_BLANK_VSYNC_SUSPEND:    /* vsync off */
                sync = EXT_SYNC_CTL_VS_0 | EXT_SYNC_CTL_HS_NORMAL;
                break;
-       case FB_BLANK_NORMAL:           /* soft blank */
-       default: /* unblank */
+       case FB_BLANK_NORMAL:           /* soft blank */
+       default:                        /* unblank */
                break;
        }
 
@@ -1021,7 +1011,8 @@ static int cyber2000fb_blank(int blank, struct fb_info *info)
 
        if (blank <= 1) {
                /* turn on ramdacs */
-               cfb->ramdac_powerdown &= ~(RAMDAC_DACPWRDN | RAMDAC_BYPASS | RAMDAC_RAMPWRDN);
+               cfb->ramdac_powerdown &= ~(RAMDAC_DACPWRDN | RAMDAC_BYPASS |
+                                          RAMDAC_RAMPWRDN);
                cyber2000fb_write_ramdac_ctrl(cfb);
        }
 
@@ -1046,7 +1037,8 @@ static int cyber2000fb_blank(int blank, struct fb_info *info)
 
        if (blank >= 2) {
                /* turn off ramdacs */
-               cfb->ramdac_powerdown |= RAMDAC_DACPWRDN | RAMDAC_BYPASS | RAMDAC_RAMPWRDN;
+               cfb->ramdac_powerdown |= RAMDAC_DACPWRDN | RAMDAC_BYPASS |
+                                        RAMDAC_RAMPWRDN;
                cyber2000fb_write_ramdac_ctrl(cfb);
        }
 
@@ -1071,7 +1063,7 @@ static struct fb_ops cyber2000fb_ops = {
  * of this driver.  It is here solely at the moment to support the other
  * CyberPro modules external to this driver.
  */
-static struct cfb_info         *int_cfb_info;
+static struct cfb_info *int_cfb_info;
 
 /*
  * Enable access to the extended registers
@@ -1088,6 +1080,7 @@ void cyber2000fb_enable_extregs(struct cfb_info *cfb)
                cyber2000_grphw(EXT_FUNC_CTL, old, cfb);
        }
 }
+EXPORT_SYMBOL(cyber2000fb_enable_extregs);
 
 /*
  * Disable access to the extended registers
@@ -1107,11 +1100,13 @@ void cyber2000fb_disable_extregs(struct cfb_info *cfb)
        else
                cfb->func_use_count -= 1;
 }
+EXPORT_SYMBOL(cyber2000fb_disable_extregs);
 
 void cyber2000fb_get_fb_var(struct cfb_info *cfb, struct fb_var_screeninfo *var)
 {
        memcpy(var, &cfb->fb.var, sizeof(struct fb_var_screeninfo));
 }
+EXPORT_SYMBOL(cyber2000fb_get_fb_var);
 
 /*
  * Attach a capture/tv driver to the core CyberX0X0 driver.
@@ -1125,13 +1120,15 @@ int cyber2000fb_attach(struct cyberpro_info *info, int idx)
                info->fb_size         = int_cfb_info->fb.fix.smem_len;
                info->enable_extregs  = cyber2000fb_enable_extregs;
                info->disable_extregs = cyber2000fb_disable_extregs;
-               info->info            = int_cfb_info;
+               info->info            = int_cfb_info;
 
-               strlcpy(info->dev_name, int_cfb_info->fb.fix.id, sizeof(info->dev_name));
+               strlcpy(info->dev_name, int_cfb_info->fb.fix.id,
+                       sizeof(info->dev_name));
        }
 
        return int_cfb_info != NULL;
 }
+EXPORT_SYMBOL(cyber2000fb_attach);
 
 /*
  * Detach a capture/tv driver from the core CyberX0X0 driver.
@@ -1139,12 +1136,7 @@ int cyber2000fb_attach(struct cyberpro_info *info, int idx)
 void cyber2000fb_detach(int idx)
 {
 }
-
-EXPORT_SYMBOL(cyber2000fb_attach);
 EXPORT_SYMBOL(cyber2000fb_detach);
-EXPORT_SYMBOL(cyber2000fb_enable_extregs);
-EXPORT_SYMBOL(cyber2000fb_disable_extregs);
-EXPORT_SYMBOL(cyber2000fb_get_fb_var);
 
 /*
  * These parameters give
@@ -1208,7 +1200,7 @@ static void cyberpro_init_hw(struct cfb_info *cfb)
        int i;
 
        for (i = 0; i < sizeof(igs_regs); i += 2)
-               cyber2000_grphw(igs_regs[i], igs_regs[i+1], cfb);
+               cyber2000_grphw(igs_regs[i], igs_regs[i + 1], cfb);
 
        if (cfb->id == ID_CYBERPRO_5000) {
                unsigned char val;
@@ -1218,23 +1210,22 @@ static void cyberpro_init_hw(struct cfb_info *cfb)
        }
 }
 
-static struct cfb_info * __devinit
-cyberpro_alloc_fb_info(unsigned int id, char *name)
+static struct cfb_info __devinit *cyberpro_alloc_fb_info(unsigned int id,
+                                                        char *name)
 {
        struct cfb_info *cfb;
 
-       cfb = kmalloc(sizeof(struct cfb_info), GFP_KERNEL);
+       cfb = kzalloc(sizeof(struct cfb_info), GFP_KERNEL);
        if (!cfb)
                return NULL;
 
-       memset(cfb, 0, sizeof(struct cfb_info));
 
        cfb->id                 = id;
 
        if (id == ID_CYBERPRO_5000)
-               cfb->ref_ps     = 40690; // 24.576 MHz
+               cfb->ref_ps     = 40690; /* 24.576 MHz */
        else
-               cfb->ref_ps     = 69842; // 14.31818 MHz (69841?)
+               cfb->ref_ps     = 69842; /* 14.31818 MHz (69841?) */
 
        cfb->divisors[0]        = 1;
        cfb->divisors[1]        = 2;
@@ -1286,8 +1277,7 @@ cyberpro_alloc_fb_info(unsigned int id, char *name)
        return cfb;
 }
 
-static void
-cyberpro_free_fb_info(struct cfb_info *cfb)
+static void cyberpro_free_fb_info(struct cfb_info *cfb)
 {
        if (cfb) {
                /*
@@ -1304,8 +1294,7 @@ cyberpro_free_fb_info(struct cfb_info *cfb)
  *  video=cyber2000:font:fontname
  */
 #ifndef MODULE
-static int
-cyber2000fb_setup(char *options)
+static int cyber2000fb_setup(char *options)
 {
        char *opt;
 
@@ -1319,7 +1308,8 @@ cyber2000fb_setup(char *options)
                if (strncmp(opt, "font:", 5) == 0) {
                        static char default_font_storage[40];
 
-                       strlcpy(default_font_storage, opt + 5, sizeof(default_font_storage));
+                       strlcpy(default_font_storage, opt + 5,
+                               sizeof(default_font_storage));
                        default_font = default_font_storage;
                        continue;
                }
@@ -1358,10 +1348,18 @@ static int __devinit cyberpro_common_probe(struct cfb_info *cfb)
         * Determine the size of the memory.
         */
        switch (cfb->mem_ctl2 & MEM_CTL2_SIZE_MASK) {
-       case MEM_CTL2_SIZE_4MB: smem_size = 0x00400000; break;
-       case MEM_CTL2_SIZE_2MB: smem_size = 0x00200000; break;
-       case MEM_CTL2_SIZE_1MB: smem_size = 0x00100000; break;
-       default:                smem_size = 0x00100000; break;
+       case MEM_CTL2_SIZE_4MB:
+               smem_size = 0x00400000;
+               break;
+       case MEM_CTL2_SIZE_2MB:
+               smem_size = 0x00200000;
+               break;
+       case MEM_CTL2_SIZE_1MB:
+               smem_size = 0x00100000;
+               break;
+       default:
+               smem_size = 0x00100000;
+               break;
        }
 
        cfb->fb.fix.smem_len   = smem_size;
@@ -1370,8 +1368,8 @@ static int __devinit cyberpro_common_probe(struct cfb_info *cfb)
 
        err = -EINVAL;
        if (!fb_find_mode(&cfb->fb.var, &cfb->fb, NULL, NULL, 0,
-                         &cyber2000fb_default_mode, 8)) {
-               printk("%s: no valid mode found\n", cfb->fb.fix.id);
+                         &cyber2000fb_default_mode, 8)) {
+               printk(KERN_ERR "%s: no valid mode found\n", cfb->fb.fix.id);
                goto failed;
        }
 
@@ -1381,7 +1379,7 @@ static int __devinit cyberpro_common_probe(struct cfb_info *cfb)
        if (cfb->fb.var.yres_virtual < cfb->fb.var.yres)
                cfb->fb.var.yres_virtual = cfb->fb.var.yres;
 
-//     fb_set_var(&cfb->fb.var, -1, &cfb->fb);
+/*     fb_set_var(&cfb->fb.var, -1, &cfb->fb); */
 
        /*
         * Calculate the hsync and vsync frequencies.  Note that
@@ -1427,22 +1425,22 @@ static void cyberpro_common_resume(struct cfb_info *cfb)
 
 #ifdef CONFIG_ARCH_SHARK
 
-#include <asm/arch/hardware.h>
+#include <mach/framebuffer.h>
 
-static int __devinit
-cyberpro_vl_probe(void)
+static int __devinit cyberpro_vl_probe(void)
 {
        struct cfb_info *cfb;
        int err = -ENOMEM;
 
-       if (!request_mem_region(FB_START,FB_SIZE,"CyberPro2010")) return err;
+       if (!request_mem_region(FB_START, FB_SIZE, "CyberPro2010"))
+               return err;
 
        cfb = cyberpro_alloc_fb_info(ID_CYBERPRO_2010, "CyberPro2010");
        if (!cfb)
                goto failed_release;
 
        cfb->dev = NULL;
-       cfb->region = ioremap(FB_START,FB_SIZE);
+       cfb->region = ioremap(FB_START, FB_SIZE);
        if (!cfb->region)
                goto failed_ioremap;
 
@@ -1479,7 +1477,7 @@ failed:
 failed_ioremap:
        cyberpro_free_fb_info(cfb);
 failed_release:
-       release_mem_region(FB_START,FB_SIZE);
+       release_mem_region(FB_START, FB_SIZE);
 
        return err;
 }
@@ -1515,7 +1513,7 @@ static int cyberpro_pci_enable_mmio(struct cfb_info *cfb)
 
        iop = ioremap(0x3000000, 0x5000);
        if (iop == NULL) {
-               prom_printf("iga5000: cannot map I/O\n");
+               printk(KERN_ERR "iga5000: cannot map I/O\n");
                return -ENOMEM;
        }
 
@@ -1541,16 +1539,22 @@ static int cyberpro_pci_enable_mmio(struct cfb_info *cfb)
        /*
         * Allow the CyberPro to accept PCI burst accesses
         */
-       val = cyber2000_grphr(EXT_BUS_CTL, cfb);
-       if (!(val & EXT_BUS_CTL_PCIBURST_WRITE)) {
-               printk(KERN_INFO "%s: enabling PCI bursts\n", cfb->fb.fix.id);
+       if (cfb->id == ID_CYBERPRO_2010) {
+               printk(KERN_INFO "%s: NOT enabling PCI bursts\n",
+                      cfb->fb.fix.id);
+       } else {
+               val = cyber2000_grphr(EXT_BUS_CTL, cfb);
+               if (!(val & EXT_BUS_CTL_PCIBURST_WRITE)) {
+                       printk(KERN_INFO "%s: enabling PCI bursts\n",
+                               cfb->fb.fix.id);
 
-               val |= EXT_BUS_CTL_PCIBURST_WRITE;
+                       val |= EXT_BUS_CTL_PCIBURST_WRITE;
 
-               if (cfb->id == ID_CYBERPRO_5000)
-                       val |= EXT_BUS_CTL_PCIBURST_READ;
+                       if (cfb->id == ID_CYBERPRO_5000)
+                               val |= EXT_BUS_CTL_PCIBURST_READ;
 
-               cyber2000_grphw(EXT_BUS_CTL, val, cfb);
+                       cyber2000_grphw(EXT_BUS_CTL, val, cfb);
+               }
        }
 
        return 0;
@@ -1569,18 +1573,17 @@ cyberpro_pci_probe(struct pci_dev *dev, const struct pci_device_id *id)
        if (err)
                return err;
 
-       err = pci_request_regions(dev, name);
-       if (err)
-               return err;
-
        err = -ENOMEM;
        cfb = cyberpro_alloc_fb_info(id->driver_data, name);
        if (!cfb)
                goto failed_release;
 
+       err = pci_request_regions(dev, cfb->fb.fix.id);
+       if (err)
+               goto failed_regions;
+
        cfb->dev = dev;
-       cfb->region = ioremap(pci_resource_start(dev, 0),
-                             pci_resource_len(dev, 0));
+       cfb->region = pci_ioremap_bar(dev, 0);
        if (!cfb->region)
                goto failed_ioremap;
 
@@ -1630,10 +1633,10 @@ cyberpro_pci_probe(struct pci_dev *dev, const struct pci_device_id *id)
 failed:
        iounmap(cfb->region);
 failed_ioremap:
+       pci_release_regions(dev);
+failed_regions:
        cyberpro_free_fb_info(cfb);
 failed_release:
-       pci_release_regions(dev);
-
        return err;
 }
 
@@ -1687,9 +1690,10 @@ static int cyberpro_pci_resume(struct pci_dev *dev)
 }
 
 static struct pci_device_id cyberpro_pci_table[] = {
-//     Not yet
-//     { PCI_VENDOR_ID_INTERG, PCI_DEVICE_ID_INTERG_1682,
-//             PCI_ANY_ID, PCI_ANY_ID, 0, 0, ID_IGA_1682 },
+/*     Not yet
+ *     { PCI_VENDOR_ID_INTERG, PCI_DEVICE_ID_INTERG_1682,
+ *             PCI_ANY_ID, PCI_ANY_ID, 0, 0, ID_IGA_1682 },
+ */
        { PCI_VENDOR_ID_INTERG, PCI_DEVICE_ID_INTERG_2000,
                PCI_ANY_ID, PCI_ANY_ID, 0, 0, ID_CYBERPRO_2000 },
        { PCI_VENDOR_ID_INTERG, PCI_DEVICE_ID_INTERG_2010,
@@ -1699,7 +1703,7 @@ static struct pci_device_id cyberpro_pci_table[] = {
        { 0, }
 };
 
-MODULE_DEVICE_TABLE(pci,cyberpro_pci_table);
+MODULE_DEVICE_TABLE(pci, cyberpro_pci_table);
 
 static struct pci_driver cyberpro_driver = {
        .name           = "CyberPro",
@@ -1732,10 +1736,8 @@ static int __init cyber2000fb_init(void)
 
 #ifdef CONFIG_ARCH_SHARK
        err = cyberpro_vl_probe();
-       if (!err) {
+       if (!err)
                ret = 0;
-               __module_get(THIS_MODULE);
-       }
 #endif
 #ifdef CONFIG_PCI
        err = pci_register_driver(&cyberpro_driver);
@@ -1745,14 +1747,15 @@ static int __init cyber2000fb_init(void)
 
        return ret ? err : 0;
 }
+module_init(cyber2000fb_init);
 
+#ifndef CONFIG_ARCH_SHARK
 static void __exit cyberpro_exit(void)
 {
        pci_unregister_driver(&cyberpro_driver);
 }
-
-module_init(cyber2000fb_init);
 module_exit(cyberpro_exit);
+#endif
 
 MODULE_AUTHOR("Russell King");
 MODULE_DESCRIPTION("CyberPro 2000, 2010 and 5000 framebuffer driver");