]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
mtd: rawnand: Pass a nand_chip object to nand_release()
authorBoris Brezillon <boris.brezillon@bootlin.com>
Thu, 6 Sep 2018 12:05:15 +0000 (14:05 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 25 Jun 2020 13:42:00 +0000 (15:42 +0200)
[ Upstream commit 59ac276f22270fb2094910f9a734c17f41c25e70 ]

Let's make the raw NAND API consistent by patching all helpers to
take a nand_chip object instead of an mtd_info one.

Now is nand_release()'s turn.

Signed-off-by: Boris Brezillon <boris.brezillon@bootlin.com>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
50 files changed:
Documentation/driver-api/mtdnand.rst
drivers/mtd/nand/ams-delta.c
drivers/mtd/nand/au1550nd.c
drivers/mtd/nand/bcm47xxnflash/main.c
drivers/mtd/nand/bf5xx_nand.c
drivers/mtd/nand/brcmnand/brcmnand.c
drivers/mtd/nand/cafe_nand.c
drivers/mtd/nand/cmx270_nand.c
drivers/mtd/nand/cs553x_nand.c
drivers/mtd/nand/davinci_nand.c
drivers/mtd/nand/denali.c
drivers/mtd/nand/diskonchip.c
drivers/mtd/nand/docg4.c
drivers/mtd/nand/fsl_elbc_nand.c
drivers/mtd/nand/fsl_ifc_nand.c
drivers/mtd/nand/fsl_upm.c
drivers/mtd/nand/fsmc_nand.c
drivers/mtd/nand/gpio.c
drivers/mtd/nand/gpmi-nand/gpmi-nand.c
drivers/mtd/nand/hisi504_nand.c
drivers/mtd/nand/jz4740_nand.c
drivers/mtd/nand/jz4780_nand.c
drivers/mtd/nand/lpc32xx_mlc.c
drivers/mtd/nand/lpc32xx_slc.c
drivers/mtd/nand/mpc5121_nfc.c
drivers/mtd/nand/mtk_nand.c
drivers/mtd/nand/mxc_nand.c
drivers/mtd/nand/nand_base.c
drivers/mtd/nand/nandsim.c
drivers/mtd/nand/ndfc.c
drivers/mtd/nand/nuc900_nand.c
drivers/mtd/nand/omap2.c
drivers/mtd/nand/orion_nand.c
drivers/mtd/nand/oxnas_nand.c
drivers/mtd/nand/pasemi_nand.c
drivers/mtd/nand/plat_nand.c
drivers/mtd/nand/pxa3xx_nand.c
drivers/mtd/nand/qcom_nandc.c
drivers/mtd/nand/r852.c
drivers/mtd/nand/s3c2410.c
drivers/mtd/nand/sh_flctl.c
drivers/mtd/nand/sharpsl.c
drivers/mtd/nand/socrates_nand.c
drivers/mtd/nand/sunxi_nand.c
drivers/mtd/nand/tango_nand.c
drivers/mtd/nand/tmio_nand.c
drivers/mtd/nand/txx9ndfmc.c
drivers/mtd/nand/vf610_nfc.c
drivers/mtd/nand/xway_nand.c
include/linux/mtd/rawnand.h

index 2a5191b6d4459fa76734bcdbad1f21e30278dcd9..15449334b1242dc19b508d504f6ce65bbdead5d3 100644 (file)
@@ -277,7 +277,7 @@ unregisters the partitions in the MTD layer.
     static void __exit board_cleanup (void)
     {
         /* Release resources, unregister device */
-        nand_release (board_mtd);
+        nand_release (mtd_to_nand(board_mtd));
 
         /* unmap physical address */
         iounmap(baseaddr);
index dcec9cf4983f812833bc9082eee7dc383c913eff..e22a9ffa9cb736a7cdc25fd80e040f8ab34a3265 100644 (file)
@@ -263,7 +263,7 @@ static int ams_delta_cleanup(struct platform_device *pdev)
        void __iomem *io_base = platform_get_drvdata(pdev);
 
        /* Release resources, unregister device */
-       nand_release(ams_delta_mtd);
+       nand_release(mtd_to_nand(ams_delta_mtd));
 
        gpio_free_array(_mandatory_gpio, ARRAY_SIZE(_mandatory_gpio));
        gpio_free(AMS_DELTA_GPIO_PIN_NAND_RB);
index 9d4a28fa6b73b2aaf17591ba57d5cf74b67d1aa7..99c738be2545d062df9ed3e5ba9d93fa34913dce 100644 (file)
@@ -496,7 +496,7 @@ static int au1550nd_remove(struct platform_device *pdev)
        struct au1550nd_ctx *ctx = platform_get_drvdata(pdev);
        struct resource *r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
 
-       nand_release(nand_to_mtd(&ctx->chip));
+       nand_release(&ctx->chip);
        iounmap(ctx->base);
        release_mem_region(r->start, 0x1000);
        kfree(ctx);
index fb31429b70a9a2428d45daee8e9c3c45b3f2b542..d79694160845760f03fa59a40173e348756e3418 100644 (file)
@@ -65,7 +65,7 @@ static int bcm47xxnflash_remove(struct platform_device *pdev)
 {
        struct bcm47xxnflash *nflash = platform_get_drvdata(pdev);
 
-       nand_release(nand_to_mtd(&nflash->nand_chip));
+       nand_release(&nflash->nand_chip);
 
        return 0;
 }
index 5655dca6ce434769b96e30fb4c59168267f6c461..ebcbcbaa8b54712a194ea63257ef42da0f5af669 100644 (file)
@@ -688,7 +688,7 @@ static int bf5xx_nand_remove(struct platform_device *pdev)
         * and their partitions, then go through freeing the
         * resources used
         */
-       nand_release(nand_to_mtd(&info->chip));
+       nand_release(&info->chip);
 
        peripheral_free_list(bfin_nfc_pin_req);
        bf5xx_nand_dma_remove(info);
index f8d793b15a7a93c8ef655aec136ddfe3ed30955c..2bb8e6faa5391f0f1a1c58539fa7053e38d6624d 100644 (file)
@@ -2597,7 +2597,7 @@ int brcmnand_remove(struct platform_device *pdev)
        struct brcmnand_host *host;
 
        list_for_each_entry(host, &ctrl->host_list, node)
-               nand_release(nand_to_mtd(&host->chip));
+               nand_release(&host->chip);
 
        clk_disable_unprepare(ctrl->clk);
 
index bc558c438a57411dfd94ceebb9f8eb117b270292..98c013094fa238e317f72f72c58016dbcf3b94c6 100644 (file)
@@ -826,7 +826,7 @@ static void cafe_nand_remove(struct pci_dev *pdev)
        /* Disable NAND IRQ in global IRQ mask register */
        cafe_writel(cafe, ~1 & cafe_readl(cafe, GLOBAL_IRQ_MASK), GLOBAL_IRQ_MASK);
        free_irq(pdev->irq, mtd);
-       nand_release(mtd);
+       nand_release(chip);
        free_rs(cafe->rs);
        pci_iounmap(pdev, cafe->mmio);
        dma_free_coherent(&cafe->pdev->dev,
index 1fc435f994e1eca9738b6d28c1b5adb8deb367d5..7b824ae88ab013e08eb6352b8ef5a0629019de30 100644 (file)
@@ -230,7 +230,7 @@ module_init(cmx270_init);
 static void __exit cmx270_cleanup(void)
 {
        /* Release resources, unregister device */
-       nand_release(cmx270_nand_mtd);
+       nand_release(mtd_to_nand(cmx270_nand_mtd));
 
        gpio_free(GPIO_NAND_RB);
        gpio_free(GPIO_NAND_CS);
index d48877540f14477a3892080257a98d87b603e690..647d4ee693457233e120358349d4f521cdfbed9f 100644 (file)
@@ -338,7 +338,7 @@ static void __exit cs553x_cleanup(void)
                mmio_base = this->IO_ADDR_R;
 
                /* Release resources, unregister device */
-               nand_release(mtd);
+               nand_release(this);
                kfree(mtd->name);
                cs553x_mtd[i] = NULL;
 
index ccc8c43abcff3ec04ec8c55a47b92e66b241346b..e66f1385b49e8f0186f769e44155ad5be7bc6114 100644 (file)
@@ -854,7 +854,7 @@ static int nand_davinci_remove(struct platform_device *pdev)
                ecc4_busy = false;
        spin_unlock_irq(&davinci_nand_lock);
 
-       nand_release(nand_to_mtd(&info->chip));
+       nand_release(&info->chip);
 
        clk_disable_unprepare(info->clk);
 
index 3087b0ba7b7f3d708f92cf58ea838bb7685d3edb..390a18ad68eeaad485b1c03f5a3d5fe1f4d2f7c2 100644 (file)
@@ -1444,9 +1444,7 @@ EXPORT_SYMBOL(denali_init);
 /* driver exit point */
 void denali_remove(struct denali_nand_info *denali)
 {
-       struct mtd_info *mtd = nand_to_mtd(&denali->nand);
-
-       nand_release(mtd);
+       nand_release(&denali->nand);
        kfree(denali->buf);
        denali_disable_irq(denali);
 }
index c3aa53caab5cfe539def22e4dc3302afd6a0b67f..12cac07f5cf223fa0cdcfd97881c81e8f7216071 100644 (file)
@@ -1611,7 +1611,7 @@ static int __init doc_probe(unsigned long physadr)
                /* nand_release will call mtd_device_unregister, but we
                   haven't yet added it.  This is handled without incident by
                   mtd_device_unregister, as far as I can tell. */
-               nand_release(mtd);
+               nand_release(nand);
                kfree(nand);
                goto fail;
        }
@@ -1644,7 +1644,7 @@ static void release_nanddoc(void)
                doc = nand_get_controller_data(nand);
 
                nextmtd = doc->nextdoc;
-               nand_release(mtd);
+               nand_release(nand);
                iounmap(doc->virtadr);
                release_mem_region(doc->physadr, DOC_IOREMAP_LEN);
                kfree(nand);
index 2436cbc71662dc0bd4dbd7fed5d702b557634792..53fdf491d8c00a4ad02b780a66335371a73d3b20 100644 (file)
@@ -1376,7 +1376,7 @@ static int __init probe_docg4(struct platform_device *pdev)
        return 0;
 
 fail:
-       nand_release(mtd); /* deletes partitions and mtd devices */
+       nand_release(nand); /* deletes partitions and mtd devices */
        free_bch(doc->bch);
        kfree(nand);
 
@@ -1389,7 +1389,7 @@ fail_unmap:
 static int __exit cleanup_docg4(struct platform_device *pdev)
 {
        struct docg4_priv *doc = platform_get_drvdata(pdev);
-       nand_release(doc->mtd);
+       nand_release(mtd_to_nand(doc->mtd));
        free_bch(doc->bch);
        kfree(mtd_to_nand(doc->mtd));
        iounmap(doc->virtadr);
index 17db2f90aa2c33d4c4b6b3da53e4762fdd8e37bd..0f70bd961234e8e3c91c24b10cf762af0e5b79fd 100644 (file)
@@ -813,7 +813,7 @@ static int fsl_elbc_chip_remove(struct fsl_elbc_mtd *priv)
        struct fsl_elbc_fcm_ctrl *elbc_fcm_ctrl = priv->ctrl->nand;
        struct mtd_info *mtd = nand_to_mtd(&priv->chip);
 
-       nand_release(mtd);
+       nand_release(&priv->chip);
 
        kfree(mtd->name);
 
index 16deba1a2385876ae8002eab2c6df14f1294a576..0d492816143978811088dd9b8971123e7669cf79 100644 (file)
@@ -927,7 +927,7 @@ static int fsl_ifc_chip_remove(struct fsl_ifc_mtd *priv)
 {
        struct mtd_info *mtd = nand_to_mtd(&priv->chip);
 
-       nand_release(mtd);
+       nand_release(&priv->chip);
 
        kfree(mtd->name);
 
index a88e2cf66e0f69a0d5d94ea4d1340701c82884ec..009e96fb92ae2879ed69e65e35a8020af651e162 100644 (file)
@@ -326,7 +326,7 @@ static int fun_remove(struct platform_device *ofdev)
        struct mtd_info *mtd = nand_to_mtd(&fun->chip);
        int i;
 
-       nand_release(mtd);
+       nand_release(&fun->chip);
        kfree(mtd->name);
 
        for (i = 0; i < fun->mchip_count; i++) {
index eac15d9bf49eb79ed1be86bd868ee8c2711105f4..3be80e15e40021b415e961cab4b863232f608cd6 100644 (file)
@@ -1118,7 +1118,7 @@ static int fsmc_nand_remove(struct platform_device *pdev)
        struct fsmc_nand_data *host = platform_get_drvdata(pdev);
 
        if (host) {
-               nand_release(nand_to_mtd(&host->nand));
+               nand_release(&host->nand);
 
                if (host->mode == USE_DMA_ACCESS) {
                        dma_release_channel(host->write_dma_chan);
index fd3648952b5a70281ce9e7ac596facdfe4ddfd04..81b02b81e98448949dbf295ea9d7b34ffd83af34 100644 (file)
@@ -199,7 +199,7 @@ static int gpio_nand_remove(struct platform_device *pdev)
 {
        struct gpiomtd *gpiomtd = platform_get_drvdata(pdev);
 
-       nand_release(nand_to_mtd(&gpiomtd->nand_chip));
+       nand_release(&gpiomtd->nand_chip);
 
        if (gpio_is_valid(gpiomtd->plat.gpio_nwp))
                gpio_set_value(gpiomtd->plat.gpio_nwp, 0);
index d4d824ef64e9fb395af3bc549daae72b96731e16..c7d0d2eed6c25d1366541cf6f6c1182a49ebfa4e 100644 (file)
@@ -2135,7 +2135,7 @@ static int gpmi_nand_remove(struct platform_device *pdev)
 {
        struct gpmi_nand_data *this = platform_get_drvdata(pdev);
 
-       nand_release(nand_to_mtd(&this->nand));
+       nand_release(&this->nand);
        gpmi_free_dma_buffer(this);
        release_resources(this);
        return 0;
index d9ee1a7e695636b21f13236002903ae7dfe0249a..1d1b541489f843e529c1a6b0e32a30c8b38920f0 100644 (file)
@@ -823,7 +823,7 @@ static int hisi_nfc_probe(struct platform_device *pdev)
        return 0;
 
 err_mtd:
-       nand_release(mtd);
+       nand_release(chip);
 err_res:
        return ret;
 }
@@ -831,9 +831,8 @@ err_res:
 static int hisi_nfc_remove(struct platform_device *pdev)
 {
        struct hinfc_host *host = platform_get_drvdata(pdev);
-       struct mtd_info *mtd = nand_to_mtd(&host->chip);
 
-       nand_release(mtd);
+       nand_release(&host->chip);
 
        return 0;
 }
index ad827d4af3e9bd6dbb229a07c9992abe89b4ce71..62ddea88edce5b8829b9ea38f5606630b2bdb16e 100644 (file)
@@ -480,7 +480,7 @@ static int jz_nand_probe(struct platform_device *pdev)
        return 0;
 
 err_nand_release:
-       nand_release(mtd);
+       nand_release(chip);
 err_unclaim_banks:
        while (chipnr--) {
                unsigned char bank = nand->banks[chipnr];
@@ -500,7 +500,7 @@ static int jz_nand_remove(struct platform_device *pdev)
        struct jz_nand *nand = platform_get_drvdata(pdev);
        size_t i;
 
-       nand_release(nand_to_mtd(&nand->chip));
+       nand_release(&nand->chip);
 
        /* Deassert and disable all chips */
        writel(0, nand->base + JZ_REG_NAND_CTRL);
index e69f6ae4c53952f0c8d6798c9c0dda5e49057f06..86ff46eb792561d13d8bc4ed8d24709f9ba9d31a 100644 (file)
@@ -293,7 +293,7 @@ static int jz4780_nand_init_chip(struct platform_device *pdev,
 
        ret = mtd_device_register(mtd, NULL, 0);
        if (ret) {
-               nand_release(mtd);
+               nand_release(chip);
                return ret;
        }
 
@@ -308,7 +308,7 @@ static void jz4780_nand_cleanup_chips(struct jz4780_nand_controller *nfc)
 
        while (!list_empty(&nfc->chips)) {
                chip = list_first_entry(&nfc->chips, struct jz4780_nand_chip, chip_list);
-               nand_release(nand_to_mtd(&chip->chip));
+               nand_release(&chip->chip);
                list_del(&chip->chip_list);
        }
 }
index 5796468db653450494876bcf6c5da772f7f6bd3e..d19d07931c2b830fafdac6b510a987959760263e 100644 (file)
@@ -805,7 +805,7 @@ static int lpc32xx_nand_probe(struct platform_device *pdev)
        if (!res)
                return res;
 
-       nand_release(mtd);
+       nand_release(nand_chip);
 
 err_exit4:
        free_irq(host->irq, host);
@@ -829,9 +829,8 @@ err_exit1:
 static int lpc32xx_nand_remove(struct platform_device *pdev)
 {
        struct lpc32xx_nand_host *host = platform_get_drvdata(pdev);
-       struct mtd_info *mtd = nand_to_mtd(&host->nand_chip);
 
-       nand_release(mtd);
+       nand_release(&host->nand_chip);
        free_irq(host->irq, host);
        if (use_dma)
                dma_release_channel(host->dma_chan);
index b61f28a1554d394acd282a865469ab246a0bef63..1be4aaa3d6e075e467f8d0bf8d861dcc7ce75b15 100644 (file)
@@ -935,7 +935,7 @@ static int lpc32xx_nand_probe(struct platform_device *pdev)
        if (!res)
                return res;
 
-       nand_release(mtd);
+       nand_release(chip);
 
 err_exit3:
        dma_release_channel(host->dma_chan);
@@ -954,9 +954,8 @@ static int lpc32xx_nand_remove(struct platform_device *pdev)
 {
        uint32_t tmp;
        struct lpc32xx_nand_host *host = platform_get_drvdata(pdev);
-       struct mtd_info *mtd = nand_to_mtd(&host->nand_chip);
 
-       nand_release(mtd);
+       nand_release(&host->nand_chip);
        dma_release_channel(host->dma_chan);
 
        /* Force CE high */
index b6b97cc9fba6966ec2efaa2dd40e6859ca4e2a51..b8a93b47a290171b7eaabb020334418b5aaec042 100644 (file)
@@ -829,7 +829,7 @@ static int mpc5121_nfc_remove(struct platform_device *op)
        struct device *dev = &op->dev;
        struct mtd_info *mtd = dev_get_drvdata(dev);
 
-       nand_release(mtd);
+       nand_release(mtd_to_nand(mtd));
        mpc5121_nfc_free(dev, mtd);
 
        return 0;
index e17f838b9b8141555594f9326efd91858baf1eea..27fcce71ad38c5a2acf49f19567fbde3d42be823 100644 (file)
@@ -1357,7 +1357,7 @@ static int mtk_nfc_nand_chip_init(struct device *dev, struct mtk_nfc *nfc,
        ret = mtd_device_parse_register(mtd, NULL, NULL, NULL, 0);
        if (ret) {
                dev_err(dev, "mtd parse partition error\n");
-               nand_release(mtd);
+               nand_release(nand);
                return ret;
        }
 
@@ -1514,7 +1514,7 @@ static int mtk_nfc_remove(struct platform_device *pdev)
        while (!list_empty(&nfc->chips)) {
                chip = list_first_entry(&nfc->chips, struct mtk_nfc_nand_chip,
                                        node);
-               nand_release(nand_to_mtd(&chip->nand));
+               nand_release(&chip->nand);
                list_del(&chip->node);
        }
 
index fcb575d55b89b7fd83eeacbe29de4bec09d66e5b..808d85bde9f222c564d096faac9ba4105ccc8609 100644 (file)
@@ -1834,7 +1834,7 @@ static int mxcnd_remove(struct platform_device *pdev)
 {
        struct mxc_nand_host *host = platform_get_drvdata(pdev);
 
-       nand_release(nand_to_mtd(&host->nand));
+       nand_release(&host->nand);
        if (host->clk_act)
                clk_disable_unprepare(host->clk);
 
index d410de3318542521bf283641457f0bae6e5f5775..e953eca67608aba13e9369096123b197ac6d2640 100644 (file)
@@ -5046,12 +5046,12 @@ EXPORT_SYMBOL_GPL(nand_cleanup);
 /**
  * nand_release - [NAND Interface] Unregister the MTD device and free resources
  *               held by the NAND device
- * @mtd: MTD device structure
+ * @chip: NAND chip object
  */
-void nand_release(struct mtd_info *mtd)
+void nand_release(struct nand_chip *chip)
 {
-       mtd_device_unregister(mtd);
-       nand_cleanup(mtd_to_nand(mtd));
+       mtd_device_unregister(nand_to_mtd(chip));
+       nand_cleanup(chip);
 }
 EXPORT_SYMBOL_GPL(nand_release);
 
index 44322a363ba549dd7120138fb2b0f977a09260f5..dbb0e47f519755f1a5f4697233dedac4e179662e 100644 (file)
@@ -2356,7 +2356,7 @@ static int __init ns_init_module(void)
 
 err_exit:
        free_nandsim(nand);
-       nand_release(nsmtd);
+       nand_release(chip);
        for (i = 0;i < ARRAY_SIZE(nand->partitions); ++i)
                kfree(nand->partitions[i].name);
 error:
@@ -2378,7 +2378,7 @@ static void __exit ns_cleanup_module(void)
        int i;
 
        free_nandsim(ns);    /* Free nandsim private resources */
-       nand_release(nsmtd); /* Unregister driver */
+       nand_release(chip); /* Unregister driver */
        for (i = 0;i < ARRAY_SIZE(ns->partitions); ++i)
                kfree(ns->partitions[i].name);
        kfree(mtd_to_nand(nsmtd));        /* Free other structures */
index d8a806894937660dce9defd2fdf35c5a3c654126..eb84328d9bded9892a1bb0c4d29e39585748635a 100644 (file)
@@ -258,7 +258,7 @@ static int ndfc_remove(struct platform_device *ofdev)
        struct ndfc_controller *ndfc = dev_get_drvdata(&ofdev->dev);
        struct mtd_info *mtd = nand_to_mtd(&ndfc->chip);
 
-       nand_release(mtd);
+       nand_release(&ndfc->chip);
        kfree(mtd->name);
 
        return 0;
index 7bb4d2ea93421a4d880b77bdce8fad99052fc53f..a79f88c6d0102a14057d6d8dc603750dce42b439 100644 (file)
@@ -284,7 +284,7 @@ static int nuc900_nand_remove(struct platform_device *pdev)
 {
        struct nuc900_nand *nuc900_nand = platform_get_drvdata(pdev);
 
-       nand_release(nand_to_mtd(&nuc900_nand->chip));
+       nand_release(&nuc900_nand->chip);
        clk_disable(nuc900_nand->clk);
 
        return 0;
index 9f98f74ff221aff93431e6408c899d2c20e7f58a..110c0726c665e77c3fabcfb8de482a88fb8885dc 100644 (file)
@@ -2306,7 +2306,7 @@ static int omap_nand_remove(struct platform_device *pdev)
        }
        if (info->dma)
                dma_release_channel(info->dma);
-       nand_release(mtd);
+       nand_release(nand_chip);
        return 0;
 }
 
index 5a5aa1f07d07477cb9a5e0b88d9309a772e9282e..2f21c678d6efd46b96bec51c64e73ff16721340c 100644 (file)
@@ -186,7 +186,7 @@ static int __init orion_nand_probe(struct platform_device *pdev)
        mtd->name = "orion_nand";
        ret = mtd_device_register(mtd, board->parts, board->nr_parts);
        if (ret) {
-               nand_release(mtd);
+               nand_release(nc);
                goto no_dev;
        }
 
@@ -201,9 +201,8 @@ static int orion_nand_remove(struct platform_device *pdev)
 {
        struct orion_nand_info *info = platform_get_drvdata(pdev);
        struct nand_chip *chip = &info->chip;
-       struct mtd_info *mtd = nand_to_mtd(chip);
 
-       nand_release(mtd);
+       nand_release(chip);
 
        clk_disable_unprepare(info->clk);
 
index d649d5944826ef9005a495720e1c0a5966147da5..ff58999887388843181c73cd9ddae717a1e6794c 100644 (file)
@@ -148,7 +148,7 @@ static int oxnas_nand_probe(struct platform_device *pdev)
 
                err = mtd_device_register(mtd, NULL, 0);
                if (err) {
-                       nand_release(mtd);
+                       nand_release(chip);
                        goto err_clk_unprepare;
                }
 
@@ -176,7 +176,7 @@ static int oxnas_nand_remove(struct platform_device *pdev)
        struct oxnas_nand_ctrl *oxnas = platform_get_drvdata(pdev);
 
        if (oxnas->chips[0])
-               nand_release(nand_to_mtd(oxnas->chips[0]));
+               nand_release(oxnas->chips[0]);
 
        clk_disable_unprepare(oxnas->clk);
 
index d69e5bae541e2eb039aa119554ac745986c19704..f0f4ff9609655a9f75817da153b1f08ad671ba49 100644 (file)
@@ -193,7 +193,7 @@ static int pasemi_nand_remove(struct platform_device *ofdev)
        chip = mtd_to_nand(pasemi_nand_mtd);
 
        /* Release resources, unregister device */
-       nand_release(pasemi_nand_mtd);
+       nand_release(chip);
 
        release_region(lpcctl, 4);
 
index 925a1323604de5ab0c6c897789f255804d6106a8..2906996d226206e7f50841aae06bb2b0d923f7c2 100644 (file)
@@ -99,7 +99,7 @@ static int plat_nand_probe(struct platform_device *pdev)
        if (!err)
                return err;
 
-       nand_release(mtd);
+       nand_release(&data->chip);
 out:
        if (pdata->ctrl.remove)
                pdata->ctrl.remove(pdev);
@@ -114,7 +114,7 @@ static int plat_nand_remove(struct platform_device *pdev)
        struct plat_nand_data *data = platform_get_drvdata(pdev);
        struct platform_nand_data *pdata = dev_get_platdata(&pdev->dev);
 
-       nand_release(nand_to_mtd(&data->chip));
+       nand_release(&data->chip);
        if (pdata->ctrl.remove)
                pdata->ctrl.remove(pdev);
 
index 125b744c9c285c91eddc9f0c22684cf31dcfa552..df62f99979f3caa2428c37ed11f55e58021b9ecf 100644 (file)
@@ -1915,7 +1915,7 @@ static int pxa3xx_nand_remove(struct platform_device *pdev)
        clk_disable_unprepare(info->clk);
 
        for (cs = 0; cs < pdata->num_cs; cs++)
-               nand_release(nand_to_mtd(&info->host[cs]->chip));
+               nand_release(&info->host[cs]->chip);
        return 0;
 }
 
index 09d5f7df60237dee9bf77c3606f63c9ed488c61d..65d1be2c30497259a6dfac4b10a9fdbb769b20c5 100644 (file)
@@ -2760,7 +2760,7 @@ static int qcom_nandc_remove(struct platform_device *pdev)
        struct qcom_nand_host *host;
 
        list_for_each_entry(host, &nandc->host_list, node)
-               nand_release(nand_to_mtd(&host->chip));
+               nand_release(&host->chip);
 
        qcom_nandc_unalloc(nandc);
 
index fc9287af4614039d305362b579112bc9d90cab0a..2cfa54941395228f41b66a01d6bd96b9c0ae1b32 100644 (file)
@@ -656,7 +656,7 @@ static int r852_register_nand_device(struct r852_device *dev)
        dev->card_registred = 1;
        return 0;
 error3:
-       nand_release(mtd);
+       nand_release(dev->chip);
 error1:
        /* Force card redetect */
        dev->card_detected = 0;
@@ -675,7 +675,7 @@ static void r852_unregister_nand_device(struct r852_device *dev)
                return;
 
        device_remove_file(&mtd->dev, &dev_attr_media_type);
-       nand_release(mtd);
+       nand_release(dev->chip);
        r852_engine_disable(dev);
        dev->card_registred = 0;
 }
index 4c383eeec6f6f74aeb2c5894dd221b6ee41a1b73..f60de68bfabcc5712831ee5cdedd1ea881bf28fb 100644 (file)
@@ -784,7 +784,7 @@ static int s3c24xx_nand_remove(struct platform_device *pdev)
 
                for (mtdno = 0; mtdno < info->mtd_count; mtdno++, ptr++) {
                        pr_debug("releasing mtd %d (%p)\n", mtdno, ptr);
-                       nand_release(nand_to_mtd(&ptr->chip));
+                       nand_release(&ptr->chip);
                }
        }
 
index 43db80e5d994f7936a96ea7290ce01748a757507..f2ed03ee30355ca3be255ed8ebc540ca7154b505 100644 (file)
@@ -1231,7 +1231,7 @@ static int flctl_remove(struct platform_device *pdev)
        struct sh_flctl *flctl = platform_get_drvdata(pdev);
 
        flctl_release_dma(flctl);
-       nand_release(nand_to_mtd(&flctl->chip));
+       nand_release(&flctl->chip);
        pm_runtime_disable(&pdev->dev);
 
        return 0;
index f59c455d9f5170f7749bd7b7a35f4ed7ca1325a6..6cfff0c81153f8246f2e3b6aa3a09be2704570b9 100644 (file)
@@ -192,7 +192,7 @@ static int sharpsl_nand_probe(struct platform_device *pdev)
        return 0;
 
 err_add:
-       nand_release(mtd);
+       nand_release(this);
 
 err_scan:
        iounmap(sharpsl->io);
@@ -210,7 +210,7 @@ static int sharpsl_nand_remove(struct platform_device *pdev)
        struct sharpsl_nand *sharpsl = platform_get_drvdata(pdev);
 
        /* Release resources, unregister device */
-       nand_release(nand_to_mtd(&sharpsl->chip));
+       nand_release(&sharpsl->chip);
 
        iounmap(sharpsl->io);
 
index 575997d0ef8a0d4a64f9fd65d0d299a9105fc029..f960f18ea3e24f38b123bb5fcb510414900619e2 100644 (file)
@@ -195,7 +195,7 @@ static int socrates_nand_probe(struct platform_device *ofdev)
        if (!res)
                return res;
 
-       nand_release(mtd);
+       nand_release(nand_chip);
 
 out:
        iounmap(host->io_base);
@@ -208,9 +208,8 @@ out:
 static int socrates_nand_remove(struct platform_device *ofdev)
 {
        struct socrates_nand_host *host = dev_get_drvdata(&ofdev->dev);
-       struct mtd_info *mtd = nand_to_mtd(&host->nand_chip);
 
-       nand_release(mtd);
+       nand_release(&host->nand_chip);
 
        iounmap(host->io_base);
 
index 8e523148239769107f5fdef8674de422d0c8fb2a..d6e31e8a7b668e8e1caf13867fe249c9bf1974f2 100644 (file)
@@ -2125,7 +2125,7 @@ static int sunxi_nand_chip_init(struct device *dev, struct sunxi_nfc *nfc,
        ret = mtd_device_register(mtd, NULL, 0);
        if (ret) {
                dev_err(dev, "failed to register mtd device: %d\n", ret);
-               nand_release(mtd);
+               nand_release(nand);
                return ret;
        }
 
@@ -2164,7 +2164,7 @@ static void sunxi_nand_chips_cleanup(struct sunxi_nfc *nfc)
        while (!list_empty(&nfc->chips)) {
                chip = list_first_entry(&nfc->chips, struct sunxi_nand_chip,
                                        node);
-               nand_release(nand_to_mtd(&chip->nand));
+               nand_release(&chip->nand);
                sunxi_nand_ecc_cleanup(&chip->nand.ecc);
                list_del(&chip->node);
        }
index ce366816a7efb47fee4fb947ea3a2507718dffc2..1ab16a90ea296362c5e82d947dab9f6190f3b0d2 100644 (file)
@@ -619,7 +619,7 @@ static int tango_nand_remove(struct platform_device *pdev)
 
        for (cs = 0; cs < MAX_CS; ++cs) {
                if (nfc->chips[cs])
-                       nand_release(nand_to_mtd(&nfc->chips[cs]->nand_chip));
+                       nand_release(&nfc->chips[cs]->nand_chip);
        }
 
        return 0;
index 84dbf32332e1292844676a5f9c2b85f6fdf1562e..5a082d9432f96d01d2951727dbdfcba79384b612 100644 (file)
@@ -448,7 +448,7 @@ static int tmio_probe(struct platform_device *dev)
        if (!retval)
                return retval;
 
-       nand_release(mtd);
+       nand_release(nand_chip);
 
 err_irq:
        tmio_hw_stop(dev, tmio);
@@ -459,7 +459,7 @@ static int tmio_remove(struct platform_device *dev)
 {
        struct tmio_nand *tmio = platform_get_drvdata(dev);
 
-       nand_release(nand_to_mtd(&tmio->chip));
+       nand_release(&tmio->chip);
        tmio_hw_stop(dev, tmio);
        return 0;
 }
index b567d212fe7ded16f935386326ed06a8793b2a77..236181b2985ad9f105f08c49371499638c599294 100644 (file)
@@ -390,7 +390,7 @@ static int __exit txx9ndfmc_remove(struct platform_device *dev)
                chip = mtd_to_nand(mtd);
                txx9_priv = nand_get_controller_data(chip);
 
-               nand_release(mtd);
+               nand_release(chip);
                kfree(txx9_priv->mtdname);
                kfree(txx9_priv);
        }
index e2583a539b413e3299691df313d737c33565b445..688393526b5aac00ab327fa1769f984d3f74b8c0 100644 (file)
@@ -794,7 +794,7 @@ static int vf610_nfc_remove(struct platform_device *pdev)
        struct mtd_info *mtd = platform_get_drvdata(pdev);
        struct vf610_nfc *nfc = mtd_to_nfc(mtd);
 
-       nand_release(mtd);
+       nand_release(mtd_to_nand(mtd));
        clk_disable_unprepare(nfc->clk);
        return 0;
 }
index 9926b4e3d69d014d70bb9f48941e9bc3037cce77..1988bb943d1bc1dc2fcbcc300482998223969973 100644 (file)
@@ -211,7 +211,7 @@ static int xway_nand_probe(struct platform_device *pdev)
 
        err = mtd_device_register(mtd, NULL, 0);
        if (err)
-               nand_release(mtd);
+               nand_release(&data->chip);
 
        return err;
 }
@@ -223,7 +223,7 @@ static int xway_nand_remove(struct platform_device *pdev)
 {
        struct xway_nand_data *data = platform_get_drvdata(pdev);
 
-       nand_release(nand_to_mtd(&data->chip));
+       nand_release(&data->chip);
 
        return 0;
 }
index 2b05f4273babda7bde2247c07bf90f9363a73e7e..e9a791f46eb6496a0e539ffd1635ba63f5424ee7 100644 (file)
@@ -22,6 +22,7 @@
 #include <linux/mtd/flashchip.h>
 #include <linux/mtd/bbm.h>
 
+struct nand_chip;
 struct mtd_info;
 struct nand_flash_dev;
 struct device_node;
@@ -37,7 +38,7 @@ int nand_scan_ident(struct mtd_info *mtd, int max_chips,
 int nand_scan_tail(struct mtd_info *mtd);
 
 /* Unregister the MTD device and free resources held by the NAND device */
-void nand_release(struct mtd_info *mtd);
+void nand_release(struct nand_chip *chip);
 
 /* Internal helper for board drivers which need to override command function */
 void nand_wait_ready(struct mtd_info *mtd);
@@ -227,9 +228,6 @@ enum nand_ecc_algo {
 #define NAND_CI_CELLTYPE_MSK   0x0C
 #define NAND_CI_CELLTYPE_SHIFT 2
 
-/* Keep gcc happy */
-struct nand_chip;
-
 /* ONFI features */
 #define ONFI_FEATURE_16_BIT_BUS                (1 << 0)
 #define ONFI_FEATURE_EXT_PARAM_PAGE    (1 << 7)