struct hinfc_host {
        struct nand_chip        chip;
-       struct mtd_info         mtd;
        struct device           *dev;
        void __iomem            *iobase;
        void __iomem            *mmio;
 
 static void hisi_nfc_dma_transfer(struct hinfc_host *host, int todev)
 {
-       struct mtd_info *mtd = &host->mtd;
-       struct nand_chip *chip = mtd_to_nand(mtd);
+       struct nand_chip *chip = &host->chip;
+       struct mtd_info *mtd = nand_to_mtd(chip);
        unsigned long val;
        int ret;
 
 
 static int hisi_nfc_send_cmd_readstart(struct hinfc_host *host)
 {
-       struct mtd_info *mtd = &host->mtd;
+       struct mtd_info *mtd = nand_to_mtd(&host->chip);
 
        if ((host->addr_value[0] == host->cache_addr_value[0]) &&
            (host->addr_value[1] == host->cache_addr_value[1]))
        int size, strength, ecc_bits;
        struct device *dev = host->dev;
        struct nand_chip *chip = &host->chip;
-       struct mtd_info *mtd = &host->mtd;
+       struct mtd_info *mtd = nand_to_mtd(chip);
        struct device_node *np = host->dev->of_node;
 
        size = of_get_nand_ecc_step_size(np);
 
        platform_set_drvdata(pdev, host);
        chip = &host->chip;
-       mtd  = &host->mtd;
+       mtd  = nand_to_mtd(chip);
 
        irq = platform_get_irq(pdev, 0);
        if (irq < 0) {
 static int hisi_nfc_remove(struct platform_device *pdev)
 {
        struct hinfc_host *host = platform_get_drvdata(pdev);
-       struct mtd_info *mtd = &host->mtd;
+       struct mtd_info *mtd = nand_to_mtd(&host->chip);
 
        nand_release(mtd);