]> err.no Git - linux-2.6/blobdiff - drivers/mtd/maps/cstm_mips_ixx.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/steve/gfs2-2.6
[linux-2.6] / drivers / mtd / maps / cstm_mips_ixx.c
index a370953c1513a2a6c1a24a9f551d7300ea52b47b..df2c38ef105ad476769c0d30004f6a3ea61e9549 100644 (file)
@@ -38,7 +38,6 @@
 #include <linux/mtd/mtd.h>
 #include <linux/mtd/map.h>
 #include <linux/mtd/partitions.h>
-#include <linux/config.h>
 #include <linux/delay.h>
 
 #if defined(CONFIG_MIPS_ITE8172) || defined(CONFIG_MIPS_IVR)
@@ -172,7 +171,14 @@ int __init init_cstm_mips_ixx(void)
                cstm_mips_ixx_map[i].phys = cstm_mips_ixx_board_desc[i].window_addr;
                cstm_mips_ixx_map[i].virt = ioremap(cstm_mips_ixx_board_desc[i].window_addr, cstm_mips_ixx_board_desc[i].window_size);
                if (!cstm_mips_ixx_map[i].virt) {
+                       int j = 0;
                        printk(KERN_WARNING "Failed to ioremap\n");
+                       for (j = 0; j < i; j++) {
+                               if (cstm_mips_ixx_map[j].virt) {
+                                       iounmap(cstm_mips_ixx_map[j].virt);
+                                       cstm_mips_ixx_map[j].virt = NULL;
+                               }
+                       }
                        return -EIO;
                }
                cstm_mips_ixx_map[i].name = cstm_mips_ixx_board_desc[i].name;
@@ -205,8 +211,15 @@ int __init init_cstm_mips_ixx(void)
                        cstm_mips_ixx_map[i].map_priv_2 = (unsigned long)mymtd;
                        add_mtd_partitions(mymtd, parts, cstm_mips_ixx_board_desc[i].num_partitions);
                }
-               else
-                  return -ENXIO;
+               else {
+                       for (i = 0; i < PHYSMAP_NUMBER; i++) {
+                               if (cstm_mips_ixx_map[i].virt) {
+                                       iounmap(cstm_mips_ixx_map[i].virt);
+                                       cstm_mips_ixx_map[i].virt = NULL;
+                               }
+                       }
+                       return -ENXIO;
+               }
        }
        return 0;
 }