struct bf5xx_nand_info {
        /* mtd info */
        struct nand_hw_control          controller;
-       struct mtd_info                 mtd;
        struct nand_chip                chip;
 
        /* platform info */
  */
 static struct bf5xx_nand_info *mtd_to_nand_info(struct mtd_info *mtd)
 {
-       return container_of(mtd, struct bf5xx_nand_info, mtd);
+       return container_of(mtd_to_nand(mtd), struct bf5xx_nand_info,
+                           chip);
 }
 
 static struct bf5xx_nand_info *to_nand_info(struct platform_device *pdev)
  */
 static int bf5xx_nand_add_partition(struct bf5xx_nand_info *info)
 {
-       struct mtd_info *mtd = &info->mtd;
+       struct mtd_info *mtd = nand_to_mtd(&info->chip);
        struct mtd_partition *parts = info->platform->partitions;
        int nr = info->platform->nr_partitions;
 
         * and their partitions, then go through freeing the
         * resources used
         */
-       nand_release(&info->mtd);
+       nand_release(nand_to_mtd(&info->chip));
 
        peripheral_free_list(bfin_nfc_pin_req);
        bf5xx_nand_dma_remove(info);
 
        /* initialise chip data struct */
        chip = &info->chip;
+       mtd = nand_to_mtd(&info->chip);
 
        if (plat->data_width)
                chip->options |= NAND_BUSWIDTH_16;
        chip->cmd_ctrl     = bf5xx_nand_hwcontrol;
        chip->dev_ready    = bf5xx_nand_devready;
 
-       chip->priv         = &info->mtd;
+       chip->priv         = mtd;
        chip->controller   = &info->controller;
 
        chip->IO_ADDR_R    = (void __iomem *) NFC_READ;
        chip->chip_delay   = 0;
 
        /* initialise mtd info data struct */
-       mtd             = &info->mtd;
        mtd->priv       = chip;
        mtd->dev.parent = &pdev->dev;