#define JZ_NAND_MEM_ADDR_OFFSET 0x10000
 
 struct jz_nand {
-       struct mtd_info mtd;
        struct nand_chip chip;
        void __iomem *base;
        struct resource *mem;
 
 static inline struct jz_nand *mtd_to_jz_nand(struct mtd_info *mtd)
 {
-       return container_of(mtd, struct jz_nand, mtd);
+       return container_of(mtd_to_nand(mtd), struct jz_nand, chip);
 }
 
 static void jz_nand_select_chip(struct mtd_info *mtd, int chipnr)
        char gpio_name[9];
        char res_name[6];
        uint32_t ctrl;
-       struct mtd_info *mtd = &nand->mtd;
        struct nand_chip *chip = &nand->chip;
+       struct mtd_info *mtd = nand_to_mtd(chip);
 
        /* Request GPIO port. */
        gpio = JZ_GPIO_MEM_CS0 + bank - 1;
                goto err_iounmap_mmio;
        }
 
-       mtd             = &nand->mtd;
        chip            = &nand->chip;
+       mtd             = nand_to_mtd(chip);
        mtd->priv       = chip;
        mtd->dev.parent = &pdev->dev;
        mtd->name       = "jz4740-nand";
        struct jz_nand *nand = platform_get_drvdata(pdev);
        size_t i;
 
-       nand_release(&nand->mtd);
+       nand_release(nand_to_mtd(&nand->chip));
 
        /* Deassert and disable all chips */
        writel(0, nand->base + JZ_REG_NAND_CTRL);