#include <asm/io.h>
 #include <linux/mtd/mtd.h>
 #include <linux/mtd/map.h>
-
-#ifdef CONFIG_MTD_PARTITIONS
 #include <linux/mtd/partitions.h>
-#endif
 
 #define WINDOW_ADDR 0x00000000      /* physical properties of flash */
 #define WINDOW_SIZE 0x01000000
        .phys = WINDOW_ADDR,
 };
 
-#ifdef CONFIG_MTD_PARTITIONS
-
 /*
  * MTD partitioning stuff
  */
 
 static const char *probes[] = { "RedBoot", "cmdlinepart", NULL };
 
-#endif
-
 static int                   mtd_parts_nb = 0;
 static struct mtd_partition *mtd_parts    = 0;
 
        if (mymtd) {
                mymtd->owner = THIS_MODULE;
 
-#ifdef CONFIG_MTD_PARTITIONS
                mtd_parts_nb = parse_mtd_partitions(mymtd, probes, &mtd_parts, MTDID);
                if (mtd_parts_nb > 0)
-                 part_type = "detected";
+                       part_type = "detected";
 
-               if (mtd_parts_nb == 0)
-               {
+               if (mtd_parts_nb == 0) {
                        mtd_parts = static_partitions;
                        mtd_parts_nb = ARRAY_SIZE(static_partitions);
                        part_type = "static";
                }
-#endif
-               add_mtd_device(mymtd);
+
                if (mtd_parts_nb == 0)
-                 printk(KERN_NOTICE MSG_PREFIX "no partition info available\n");
+                       printk(KERN_NOTICE MSG_PREFIX "no partition info available\n");
                else
-               {
                        printk(KERN_NOTICE MSG_PREFIX
                               "using %s partition definition\n", part_type);
-                       add_mtd_partitions(mymtd, mtd_parts, mtd_parts_nb);
-               }
+               /* Register the whole device first. */
+               mtd_device_register(mymtd, NULL, 0);
+               mtd_device_register(mymtd, mtd_parts, mtd_parts_nb);
                return 0;
        }
 
 static void __exit cleanup_edb7312nor(void)
 {
        if (mymtd) {
-               del_mtd_device(mymtd);
+               mtd_device_unregister(mymtd);
                map_destroy(mymtd);
        }
        if (edb7312nor_map.virt) {