return -ENXIO;
 
        /* Allocate memory for MTD device structure and private data */
-       ams_delta_mtd = kzalloc(sizeof(struct mtd_info) +
-                               sizeof(struct nand_chip), GFP_KERNEL);
-       if (!ams_delta_mtd) {
+       this = kzalloc(sizeof(struct nand_chip), GFP_KERNEL);
+       if (!this) {
                printk (KERN_WARNING "Unable to allocate E3 NAND MTD device structure.\n");
                err = -ENOMEM;
                goto out;
        }
 
+       ams_delta_mtd = nand_to_mtd(this);
        ams_delta_mtd->owner = THIS_MODULE;
 
-       /* Get pointer to private data */
-       this = (struct nand_chip *) (&ams_delta_mtd[1]);
-
        /* Link the private data with the MTD structure */
        ams_delta_mtd->priv = this;
 
        gpio_free(AMS_DELTA_GPIO_PIN_NAND_RB);
        iounmap(io_base);
 out_free:
-       kfree(ams_delta_mtd);
+       kfree(this);
  out:
        return err;
 }
        iounmap(io_base);
 
        /* Free the MTD device structure */
-       kfree(ams_delta_mtd);
+       kfree(mtd_to_nand(ams_delta_mtd));
 
        return 0;
 }