fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git] / drivers / video / virgefb.c
index 8d512fd..b9fb6fb 100644 (file)
@@ -39,7 +39,6 @@
 #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/zorro.h>
@@ -616,8 +615,7 @@ static struct {
 #endif
 };
 
-#define arraysize(x)   (sizeof(x)/sizeof(*(x)))
-#define NUM_TOTAL_MODES        arraysize(virgefb_predefined)
+#define NUM_TOTAL_MODES        ARRAY_SIZE(virgefb_predefined)
 
 /*
  *    Default to 800x600 for video=virge8:, virge16: or virge32:
@@ -1801,7 +1799,7 @@ int __init virgefb_init(void)
                #warning release resources
                printk(KERN_ERR "virgefb.c: register_framebuffer failed\n");
                DPRINTK("EXIT\n");
-               return -EINVAL;
+               goto out_unmap;
        }
 
        printk(KERN_INFO "fb%d: %s frame buffer device, using %ldK of video memory\n",
@@ -1809,9 +1807,23 @@ int __init virgefb_init(void)
 
        /* TODO: This driver cannot be unloaded yet */
 
-       MOD_INC_USE_COUNT;
        DPRINTK("EXIT\n");
        return 0;
+
+out_unmap:
+       if (board_addr >= 0x01000000) {
+               if (v_ram)
+                       iounmap((void*)v_ram);
+               if (vgaio_regs)
+                       iounmap(vgaio_regs);
+               if (mmio_regs)
+                       iounmap(mmio_regs);
+               if (vcode_switch_base)
+                       iounmap((void*)vcode_switch_base);
+               v_ram = vcode_switch_base = 0;
+               vgaio_regs = mmio_regs = NULL;
+       }
+       return -EINVAL;
 }
 
 
@@ -2064,14 +2076,6 @@ int init_module(void)
 {
        return virgefb_init();
 }
-
-void cleanup_module(void)
-{
-       /* Not reached because the usecount will never be
-          decremented to zero */
-       unregister_framebuffer(&fb_info);
-       /* TODO: clean up ... */
-}
 #endif /* MODULE */
 
 static int cv3d_has_4mb(void)