Merge branch 'master' into for_paulus
[linux-drm-fsl-dcu.git] / drivers / video / virgefb.c
index ed78747487e2f5587d3382bcb3f7464f34e7f0aa..b9fb6fb3600d59ee950b9d79fa34e0ce8f2b3f49 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",
@@ -1811,6 +1809,21 @@ int __init virgefb_init(void)
 
        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;
 }