Merge tag 'nand/for-6.4' into mtd/next
authorMiquel Raynal <miquel.raynal@bootlin.com>
Wed, 19 Apr 2023 18:38:54 +0000 (20:38 +0200)
committerMiquel Raynal <miquel.raynal@bootlin.com>
Wed, 19 Apr 2023 18:39:03 +0000 (20:39 +0200)
Raw NAND core changes:
* Convert to platform remove callback returning void
* Fix spelling mistake waifunc() -> waitfunc()

Raw NAND controller driver changes:
* imx: Remove unused is_imx51_nfc and imx53_nfc functions
* omap2: Drop obsolete dependency on COMPILE_TEST
* orion: Use devm_platform_ioremap_resource()
* qcom:
  - Use of_property_present() for testing DT property presence
  - Use devm_platform_get_and_ioremap_resource()
* stm32_fmc2: Depends on ARCH_STM32 instead of MACH_STM32MP157
* tmio: Remove reference to config MTD_NAND_TMIO in the parsers

Raw NAND manufacturer driver changes:
* hynix: Fix up bit 0 of sdr_timing_mode

SPI-NAND changes:
* Add support for ESMT F50x1G41LB

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
58 files changed:
drivers/mtd/nand/ecc-mxic.c
drivers/mtd/nand/onenand/Kconfig
drivers/mtd/nand/onenand/generic.c
drivers/mtd/nand/onenand/onenand_omap2.c
drivers/mtd/nand/onenand/onenand_samsung.c
drivers/mtd/nand/raw/Kconfig
drivers/mtd/nand/raw/ams-delta.c
drivers/mtd/nand/raw/arasan-nand-controller.c
drivers/mtd/nand/raw/atmel/nand-controller.c
drivers/mtd/nand/raw/au1550nd.c
drivers/mtd/nand/raw/bcm47xxnflash/main.c
drivers/mtd/nand/raw/cadence-nand-controller.c
drivers/mtd/nand/raw/davinci_nand.c
drivers/mtd/nand/raw/denali_dt.c
drivers/mtd/nand/raw/fsl_elbc_nand.c
drivers/mtd/nand/raw/fsl_ifc_nand.c
drivers/mtd/nand/raw/fsl_upm.c
drivers/mtd/nand/raw/fsmc_nand.c
drivers/mtd/nand/raw/gpio.c
drivers/mtd/nand/raw/gpmi-nand/gpmi-nand.c
drivers/mtd/nand/raw/hisi504_nand.c
drivers/mtd/nand/raw/ingenic/ingenic_nand_drv.c
drivers/mtd/nand/raw/intel-nand-controller.c
drivers/mtd/nand/raw/lpc32xx_mlc.c
drivers/mtd/nand/raw/lpc32xx_slc.c
drivers/mtd/nand/raw/marvell_nand.c
drivers/mtd/nand/raw/meson_nand.c
drivers/mtd/nand/raw/mpc5121_nfc.c
drivers/mtd/nand/raw/mtk_nand.c
drivers/mtd/nand/raw/mxc_nand.c
drivers/mtd/nand/raw/mxic_nand.c
drivers/mtd/nand/raw/nand_hynix.c
drivers/mtd/nand/raw/ndfc.c
drivers/mtd/nand/raw/omap2.c
drivers/mtd/nand/raw/omap_elm.c
drivers/mtd/nand/raw/orion_nand.c
drivers/mtd/nand/raw/oxnas_nand.c
drivers/mtd/nand/raw/pasemi_nand.c
drivers/mtd/nand/raw/pl35x-nand-controller.c
drivers/mtd/nand/raw/plat_nand.c
drivers/mtd/nand/raw/qcom_nandc.c
drivers/mtd/nand/raw/renesas-nand-controller.c
drivers/mtd/nand/raw/rockchip-nand-controller.c
drivers/mtd/nand/raw/s3c2410.c
drivers/mtd/nand/raw/sh_flctl.c
drivers/mtd/nand/raw/sharpsl.c
drivers/mtd/nand/raw/socrates_nand.c
drivers/mtd/nand/raw/stm32_fmc2_nand.c
drivers/mtd/nand/raw/sunxi_nand.c
drivers/mtd/nand/raw/tegra_nand.c
drivers/mtd/nand/raw/vf610_nfc.c
drivers/mtd/nand/raw/xway_nand.c
drivers/mtd/nand/spi/Makefile
drivers/mtd/nand/spi/core.c
drivers/mtd/nand/spi/esmt.c [new file with mode: 0644]
drivers/mtd/parsers/Kconfig
include/linux/mtd/rawnand.h
include/linux/mtd/spinand.h

index 8afdca731b87496e5b9ef77029668ba24494122c..915aadd1a170d261c78de2b8332085f37e4b4bec 100644 (file)
@@ -847,13 +847,11 @@ static int mxic_ecc_probe(struct platform_device *pdev)
        return 0;
 }
 
-static int mxic_ecc_remove(struct platform_device *pdev)
+static void mxic_ecc_remove(struct platform_device *pdev)
 {
        struct mxic_ecc_engine *mxic = platform_get_drvdata(pdev);
 
        nand_ecc_unregister_on_host_hw_engine(&mxic->external_engine);
-
-       return 0;
 }
 
 static const struct of_device_id mxic_ecc_of_ids[] = {
@@ -870,7 +868,7 @@ static struct platform_driver mxic_ecc_driver = {
                .of_match_table = mxic_ecc_of_ids,
        },
        .probe = mxic_ecc_probe,
-       .remove = mxic_ecc_remove,
+       .remove_new = mxic_ecc_remove,
 };
 module_platform_driver(mxic_ecc_driver);
 
index c94bf483541e13f8369d6fc61575df7f6e5f7847..7d57836bf32f2d6c3a567817767e4396435cce30 100644 (file)
@@ -25,7 +25,7 @@ config MTD_ONENAND_GENERIC
 config MTD_ONENAND_OMAP2
        tristate "OneNAND on OMAP2/OMAP3 support"
        depends on ARCH_OMAP2 || ARCH_OMAP3 || (COMPILE_TEST && ARM)
-       depends on OF || COMPILE_TEST
+       depends on OF
        depends on OMAP_GPMC
        help
          Support for a OneNAND flash device connected to an OMAP2/OMAP3 SoC
index a4b8b65fe15f50faeaa1225203c52cd50f6a9288..4e7de48f07a62594f0eb63d38c9432f0cc3a1db0 100644 (file)
@@ -85,7 +85,7 @@ out_free_info:
        return err;
 }
 
-static int generic_onenand_remove(struct platform_device *pdev)
+static void generic_onenand_remove(struct platform_device *pdev)
 {
        struct onenand_info *info = platform_get_drvdata(pdev);
        struct resource *res = pdev->resource;
@@ -97,8 +97,6 @@ static int generic_onenand_remove(struct platform_device *pdev)
                iounmap(info->onenand.base);
                kfree(info);
        }
-
-       return 0;
 }
 
 static struct platform_driver generic_onenand_driver = {
@@ -106,7 +104,7 @@ static struct platform_driver generic_onenand_driver = {
                .name           = DRIVER_NAME,
        },
        .probe          = generic_onenand_probe,
-       .remove         = generic_onenand_remove,
+       .remove_new     = generic_onenand_remove,
 };
 
 module_platform_driver(generic_onenand_driver);
index 12825eb97938bee88922dc2351ecd2bb3f8cc5cf..ff7af98604df2cd85ba8aa06dc47df589a1dcbec 100644 (file)
@@ -581,7 +581,7 @@ err_release_dma:
        return r;
 }
 
-static int omap2_onenand_remove(struct platform_device *pdev)
+static void omap2_onenand_remove(struct platform_device *pdev)
 {
        struct omap2_onenand *c = dev_get_drvdata(&pdev->dev);
 
@@ -589,8 +589,6 @@ static int omap2_onenand_remove(struct platform_device *pdev)
        if (c->dma_chan)
                dma_release_channel(c->dma_chan);
        omap2_onenand_shutdown(pdev);
-
-       return 0;
 }
 
 static const struct of_device_id omap2_onenand_id_table[] = {
@@ -601,7 +599,7 @@ MODULE_DEVICE_TABLE(of, omap2_onenand_id_table);
 
 static struct platform_driver omap2_onenand_driver = {
        .probe          = omap2_onenand_probe,
-       .remove         = omap2_onenand_remove,
+       .remove_new     = omap2_onenand_remove,
        .shutdown       = omap2_onenand_shutdown,
        .driver         = {
                .name   = DRIVER_NAME,
index b64895573515e5cd83227e039327e6d3d35fb74d..92151aa529647688b216b59a2eb9f8717c2aeeb5 100644 (file)
@@ -943,13 +943,11 @@ static int s3c_onenand_probe(struct platform_device *pdev)
        return 0;
 }
 
-static int s3c_onenand_remove(struct platform_device *pdev)
+static void s3c_onenand_remove(struct platform_device *pdev)
 {
        struct mtd_info *mtd = platform_get_drvdata(pdev);
 
        onenand_release(mtd);
-
-       return 0;
 }
 
 static int s3c_pm_ops_suspend(struct device *dev)
@@ -996,7 +994,7 @@ static struct platform_driver s3c_onenand_driver = {
        },
        .id_table       = s3c_onenand_driver_ids,
        .probe          = s3c_onenand_probe,
-       .remove         = s3c_onenand_remove,
+       .remove_new     = s3c_onenand_remove,
 };
 
 module_platform_driver(s3c_onenand_driver);
index 170f1185ddc4684ea698ebdab80de9397a00e36f..b523354dfb00c0beeec82888806045e2b114b1d5 100644 (file)
@@ -373,7 +373,7 @@ config MTD_NAND_TEGRA
 
 config MTD_NAND_STM32_FMC2
        tristate "Support for NAND controller on STM32MP SoCs"
-       depends on MACH_STM32MP157 || COMPILE_TEST
+       depends on ARCH_STM32 || COMPILE_TEST
        select MFD_SYSCON
        help
          Enables support for NAND Flash chips on SoCs containing the FMC2
index 13de39aa3288f273695f6ae26c3687508a12bbf9..fa621ffa649094435862aa7f54160c47b4a356bb 100644 (file)
@@ -397,7 +397,7 @@ err_nand_cleanup:
 /*
  * Clean up routine
  */
-static int gpio_nand_remove(struct platform_device *pdev)
+static void gpio_nand_remove(struct platform_device *pdev)
 {
        struct gpio_nand *priv = platform_get_drvdata(pdev);
        struct mtd_info *mtd = nand_to_mtd(&priv->nand_chip);
@@ -410,8 +410,6 @@ static int gpio_nand_remove(struct platform_device *pdev)
        ret = mtd_device_unregister(mtd);
        WARN_ON(ret);
        nand_cleanup(mtd_to_nand(mtd));
-
-       return 0;
 }
 
 #ifdef CONFIG_OF
@@ -434,7 +432,7 @@ MODULE_DEVICE_TABLE(platform, gpio_nand_plat_id_table);
 
 static struct platform_driver gpio_nand_driver = {
        .probe          = gpio_nand_probe,
-       .remove         = gpio_nand_remove,
+       .remove_new     = gpio_nand_remove,
        .id_table       = gpio_nand_plat_id_table,
        .driver         = {
                .name   = "ams-delta-nand",
index ec7e6eeac55f9f1c36c099c541cf9c956f70f402..d513d2db3549ead2808749e49e5e55c2b407b932 100644 (file)
@@ -1496,7 +1496,7 @@ disable_controller_clk:
        return ret;
 }
 
-static int anfc_remove(struct platform_device *pdev)
+static void anfc_remove(struct platform_device *pdev)
 {
        struct arasan_nfc *nfc = platform_get_drvdata(pdev);
 
@@ -1504,8 +1504,6 @@ static int anfc_remove(struct platform_device *pdev)
 
        clk_disable_unprepare(nfc->bus_clk);
        clk_disable_unprepare(nfc->controller_clk);
-
-       return 0;
 }
 
 static const struct of_device_id anfc_ids[] = {
@@ -1525,7 +1523,7 @@ static struct platform_driver anfc_driver = {
                .of_match_table = anfc_ids,
        },
        .probe = anfc_probe,
-       .remove = anfc_remove,
+       .remove_new = anfc_remove,
 };
 module_platform_driver(anfc_driver);
 
index 41c6bd6e2d72ca39df9e0b859bcbb0334c946597..81e3d682a8cde430714d23486f6249bf381b8346 100644 (file)
@@ -2626,13 +2626,11 @@ static int atmel_nand_controller_probe(struct platform_device *pdev)
        return caps->ops->probe(pdev, caps);
 }
 
-static int atmel_nand_controller_remove(struct platform_device *pdev)
+static void atmel_nand_controller_remove(struct platform_device *pdev)
 {
        struct atmel_nand_controller *nc = platform_get_drvdata(pdev);
 
        WARN_ON(nc->caps->ops->remove(nc));
-
-       return 0;
 }
 
 static __maybe_unused int atmel_nand_controller_resume(struct device *dev)
@@ -2663,7 +2661,7 @@ static struct platform_driver atmel_nand_controller_driver = {
                .pm = &atmel_nand_controller_pm_ops,
        },
        .probe = atmel_nand_controller_probe,
-       .remove = atmel_nand_controller_remove,
+       .remove_new = atmel_nand_controller_remove,
 };
 module_platform_driver(atmel_nand_controller_driver);
 
index 5aa3a06d740c79cf38e3096a544c6479fd3f2b15..063a5e0b8d4baffbe6164fa23e62939d154619e0 100644 (file)
@@ -337,7 +337,7 @@ out1:
        return ret;
 }
 
-static int au1550nd_remove(struct platform_device *pdev)
+static void au1550nd_remove(struct platform_device *pdev)
 {
        struct au1550nd_ctx *ctx = platform_get_drvdata(pdev);
        struct resource *r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
@@ -350,7 +350,6 @@ static int au1550nd_remove(struct platform_device *pdev)
        iounmap(ctx->base);
        release_mem_region(r->start, 0x1000);
        kfree(ctx);
-       return 0;
 }
 
 static struct platform_driver au1550nd_driver = {
@@ -358,7 +357,7 @@ static struct platform_driver au1550nd_driver = {
                .name   = "au1550-nand",
        },
        .probe          = au1550nd_probe,
-       .remove         = au1550nd_remove,
+       .remove_new     = au1550nd_remove,
 };
 
 module_platform_driver(au1550nd_driver);
index dcc70d9dc6e5e6c98e60de40edfad13b02f5ef9b..ebcf508e06060f4f5333a63ab189347f228e42e1 100644 (file)
@@ -57,7 +57,7 @@ static int bcm47xxnflash_probe(struct platform_device *pdev)
        return 0;
 }
 
-static int bcm47xxnflash_remove(struct platform_device *pdev)
+static void bcm47xxnflash_remove(struct platform_device *pdev)
 {
        struct bcm47xxnflash *nflash = platform_get_drvdata(pdev);
        struct nand_chip *chip = &nflash->nand_chip;
@@ -66,13 +66,11 @@ static int bcm47xxnflash_remove(struct platform_device *pdev)
        ret = mtd_device_unregister(nand_to_mtd(chip));
        WARN_ON(ret);
        nand_cleanup(chip);
-
-       return 0;
 }
 
 static struct platform_driver bcm47xxnflash_driver = {
        .probe  = bcm47xxnflash_probe,
-       .remove = bcm47xxnflash_remove,
+       .remove_new = bcm47xxnflash_remove,
        .driver = {
                .name = "bcma_nflash",
        },
index 7661a5cf1883a6c6c387721cdb85ad8e88046838..034ec564c2edb0a592ad4f4ac5331af69ae29ca7 100644 (file)
@@ -3055,18 +3055,16 @@ static int cadence_nand_dt_probe(struct platform_device *ofdev)
        return 0;
 }
 
-static int cadence_nand_dt_remove(struct platform_device *ofdev)
+static void cadence_nand_dt_remove(struct platform_device *ofdev)
 {
        struct cadence_nand_dt *dt = platform_get_drvdata(ofdev);
 
        cadence_nand_remove(&dt->cdns_ctrl);
-
-       return 0;
 }
 
 static struct platform_driver cadence_nand_dt_driver = {
        .probe          = cadence_nand_dt_probe,
-       .remove         = cadence_nand_dt_remove,
+       .remove_new     = cadence_nand_dt_remove,
        .driver         = {
                .name   = "cadence-nand-controller",
                .of_match_table = cadence_nand_dt_ids,
index 3e98e3c255bfe1e4d00e2adf97da1fa0988e2eec..415d6aaa8255a6b488a77742b58e6edbdcf0e4d0 100644 (file)
@@ -821,7 +821,7 @@ err_cleanup_nand:
        return ret;
 }
 
-static int nand_davinci_remove(struct platform_device *pdev)
+static void nand_davinci_remove(struct platform_device *pdev)
 {
        struct davinci_nand_info *info = platform_get_drvdata(pdev);
        struct nand_chip *chip = &info->chip;
@@ -835,13 +835,11 @@ static int nand_davinci_remove(struct platform_device *pdev)
        ret = mtd_device_unregister(nand_to_mtd(chip));
        WARN_ON(ret);
        nand_cleanup(chip);
-
-       return 0;
 }
 
 static struct platform_driver nand_davinci_driver = {
        .probe          = nand_davinci_probe,
-       .remove         = nand_davinci_remove,
+       .remove_new     = nand_davinci_remove,
        .driver         = {
                .name   = "davinci_nand",
                .of_match_table = of_match_ptr(davinci_nand_of_match),
index 8513bb9fcfccc848c7484bfc0aff8a84f02fc2e2..915047e3fbc2e2433e0998e1a05d2af8682aa5de 100644 (file)
@@ -233,7 +233,7 @@ out_disable_clk:
        return ret;
 }
 
-static int denali_dt_remove(struct platform_device *pdev)
+static void denali_dt_remove(struct platform_device *pdev)
 {
        struct denali_dt *dt = platform_get_drvdata(pdev);
 
@@ -243,13 +243,11 @@ static int denali_dt_remove(struct platform_device *pdev)
        clk_disable_unprepare(dt->clk_ecc);
        clk_disable_unprepare(dt->clk_x);
        clk_disable_unprepare(dt->clk);
-
-       return 0;
 }
 
 static struct platform_driver denali_dt_driver = {
        .probe          = denali_dt_probe,
-       .remove         = denali_dt_remove,
+       .remove_new     = denali_dt_remove,
        .driver         = {
                .name   = "denali-nand-dt",
                .of_match_table = denali_nand_dt_ids,
index e25119e58b69fbc517fb1b172e93d8a17d8f6121..1e3a80f06f3308c303811cc8d57286124a4ca7bc 100644 (file)
@@ -963,7 +963,7 @@ err:
        return ret;
 }
 
-static int fsl_elbc_nand_remove(struct platform_device *pdev)
+static void fsl_elbc_nand_remove(struct platform_device *pdev)
 {
        struct fsl_elbc_fcm_ctrl *elbc_fcm_ctrl = fsl_lbc_ctrl_dev->nand;
        struct fsl_elbc_mtd *priv = dev_get_drvdata(&pdev->dev);
@@ -984,8 +984,6 @@ static int fsl_elbc_nand_remove(struct platform_device *pdev)
        }
        mutex_unlock(&fsl_elbc_nand_mutex);
 
-       return 0;
-
 }
 
 static const struct of_device_id fsl_elbc_nand_match[] = {
@@ -1000,7 +998,7 @@ static struct platform_driver fsl_elbc_nand_driver = {
                .of_match_table = fsl_elbc_nand_match,
        },
        .probe = fsl_elbc_nand_probe,
-       .remove = fsl_elbc_nand_remove,
+       .remove_new = fsl_elbc_nand_remove,
 };
 
 module_platform_driver(fsl_elbc_nand_driver);
index 02d5001768382a36f344d161be77515b927ce21c..fa537fee67019baf89af253cf01d84da2cd8e955 100644 (file)
@@ -1094,7 +1094,7 @@ err:
        return ret;
 }
 
-static int fsl_ifc_nand_remove(struct platform_device *dev)
+static void fsl_ifc_nand_remove(struct platform_device *dev)
 {
        struct fsl_ifc_mtd *priv = dev_get_drvdata(&dev->dev);
        struct nand_chip *chip = &priv->chip;
@@ -1113,8 +1113,6 @@ static int fsl_ifc_nand_remove(struct platform_device *dev)
                kfree(ifc_nand_ctrl);
        }
        mutex_unlock(&fsl_ifc_nand_mutex);
-
-       return 0;
 }
 
 static const struct of_device_id fsl_ifc_nand_match[] = {
@@ -1131,7 +1129,7 @@ static struct platform_driver fsl_ifc_nand_driver = {
                .of_match_table = fsl_ifc_nand_match,
        },
        .probe       = fsl_ifc_nand_probe,
-       .remove      = fsl_ifc_nand_remove,
+       .remove_new  = fsl_ifc_nand_remove,
 };
 
 module_platform_driver(fsl_ifc_nand_driver);
index b3cc427100a22904cab8b0569e1581fe8ab63489..086426139173f39d832f3bca00ff475eb6106c8e 100644 (file)
@@ -235,7 +235,7 @@ static int fun_probe(struct platform_device *ofdev)
        return 0;
 }
 
-static int fun_remove(struct platform_device *ofdev)
+static void fun_remove(struct platform_device *ofdev)
 {
        struct fsl_upm_nand *fun = dev_get_drvdata(&ofdev->dev);
        struct nand_chip *chip = &fun->chip;
@@ -245,8 +245,6 @@ static int fun_remove(struct platform_device *ofdev)
        ret = mtd_device_unregister(mtd);
        WARN_ON(ret);
        nand_cleanup(chip);
-
-       return 0;
 }
 
 static const struct of_device_id of_fun_match[] = {
@@ -261,7 +259,7 @@ static struct platform_driver of_fun_driver = {
                .of_match_table = of_fun_match,
        },
        .probe          = fun_probe,
-       .remove         = fun_remove,
+       .remove_new     = fun_remove,
 };
 
 module_platform_driver(of_fun_driver);
index 0d34d433b732e372ed2a0ef8f412784a98ee1879..7b4742420dfcb85a89c538fcef028222a90b136b 100644 (file)
@@ -1165,7 +1165,7 @@ disable_clk:
 /*
  * Clean up routine
  */
-static int fsmc_nand_remove(struct platform_device *pdev)
+static void fsmc_nand_remove(struct platform_device *pdev)
 {
        struct fsmc_nand_data *host = platform_get_drvdata(pdev);
 
@@ -1184,8 +1184,6 @@ static int fsmc_nand_remove(struct platform_device *pdev)
                }
                clk_disable_unprepare(host->clk);
        }
-
-       return 0;
 }
 
 #ifdef CONFIG_PM_SLEEP
@@ -1224,7 +1222,7 @@ static const struct of_device_id fsmc_nand_id_table[] = {
 MODULE_DEVICE_TABLE(of, fsmc_nand_id_table);
 
 static struct platform_driver fsmc_nand_driver = {
-       .remove = fsmc_nand_remove,
+       .remove_new = fsmc_nand_remove,
        .driver = {
                .name = "fsmc-nand",
                .of_match_table = fsmc_nand_id_table,
index dcf28cff760debe12ffad7ec31983c5505ee2bff..d6cc2cb65214707f5ee35b12390f11faba53fbeb 100644 (file)
@@ -265,7 +265,7 @@ gpio_nand_get_io_sync(struct platform_device *pdev)
        return platform_get_resource(pdev, IORESOURCE_MEM, 1);
 }
 
-static int gpio_nand_remove(struct platform_device *pdev)
+static void gpio_nand_remove(struct platform_device *pdev)
 {
        struct gpiomtd *gpiomtd = platform_get_drvdata(pdev);
        struct nand_chip *chip = &gpiomtd->nand_chip;
@@ -280,8 +280,6 @@ static int gpio_nand_remove(struct platform_device *pdev)
                gpiod_set_value(gpiomtd->nwp, 0);
        if (gpiomtd->nce && !IS_ERR(gpiomtd->nce))
                gpiod_set_value(gpiomtd->nce, 0);
-
-       return 0;
 }
 
 static int gpio_nand_probe(struct platform_device *pdev)
@@ -394,7 +392,7 @@ out_ce:
 
 static struct platform_driver gpio_nand_driver = {
        .probe          = gpio_nand_probe,
-       .remove         = gpio_nand_remove,
+       .remove_new     = gpio_nand_remove,
        .driver         = {
                .name   = "gpio-nand",
                .of_match_table = of_match_ptr(gpio_nand_id_table),
index ada83344b0f921fa064e833632176a7647247d93..500e7a28d2e417117037aef90409fb5518176791 100644 (file)
@@ -2777,7 +2777,7 @@ exit_acquire_resources:
        return ret;
 }
 
-static int gpmi_nand_remove(struct platform_device *pdev)
+static void gpmi_nand_remove(struct platform_device *pdev)
 {
        struct gpmi_nand_data *this = platform_get_drvdata(pdev);
        struct nand_chip *chip = &this->nand;
@@ -2791,7 +2791,6 @@ static int gpmi_nand_remove(struct platform_device *pdev)
        nand_cleanup(chip);
        gpmi_free_dma_buffer(this);
        release_resources(this);
-       return 0;
 }
 
 #ifdef CONFIG_PM_SLEEP
@@ -2860,7 +2859,7 @@ static struct platform_driver gpmi_nand_driver = {
                .of_match_table = gpmi_nand_id_table,
        },
        .probe   = gpmi_nand_probe,
-       .remove  = gpmi_nand_remove,
+       .remove_new = gpmi_nand_remove,
 };
 module_platform_driver(gpmi_nand_driver);
 
index c74f6b2192fcfaf5583bdf2f66078d237c645db8..fe291a2e5c77c97aaa1d06f013f43c00be8acc99 100644 (file)
@@ -798,7 +798,7 @@ static int hisi_nfc_probe(struct platform_device *pdev)
        return 0;
 }
 
-static int hisi_nfc_remove(struct platform_device *pdev)
+static void hisi_nfc_remove(struct platform_device *pdev)
 {
        struct hinfc_host *host = platform_get_drvdata(pdev);
        struct nand_chip *chip = &host->chip;
@@ -807,8 +807,6 @@ static int hisi_nfc_remove(struct platform_device *pdev)
        ret = mtd_device_unregister(nand_to_mtd(chip));
        WARN_ON(ret);
        nand_cleanup(chip);
-
-       return 0;
 }
 
 #ifdef CONFIG_PM_SLEEP
@@ -860,7 +858,7 @@ static struct platform_driver hisi_nfc_driver = {
                .pm = &hisi_nfc_pm_ops,
        },
        .probe          = hisi_nfc_probe,
-       .remove         = hisi_nfc_remove,
+       .remove_new     = hisi_nfc_remove,
 };
 
 module_platform_driver(hisi_nfc_driver);
index ff26c10f295dfd75ce6c30574f0d726b0ed276a6..b9f135297aa0b4958c51f033e62e14e7720016cc 100644 (file)
@@ -522,7 +522,7 @@ static int ingenic_nand_probe(struct platform_device *pdev)
        return 0;
 }
 
-static int ingenic_nand_remove(struct platform_device *pdev)
+static void ingenic_nand_remove(struct platform_device *pdev)
 {
        struct ingenic_nfc *nfc = platform_get_drvdata(pdev);
 
@@ -530,8 +530,6 @@ static int ingenic_nand_remove(struct platform_device *pdev)
                ingenic_ecc_release(nfc->ecc);
 
        ingenic_nand_cleanup_chips(nfc);
-
-       return 0;
 }
 
 static const struct jz_soc_info jz4740_soc_info = {
@@ -564,7 +562,7 @@ MODULE_DEVICE_TABLE(of, ingenic_nand_dt_match);
 
 static struct platform_driver ingenic_nand_driver = {
        .probe          = ingenic_nand_probe,
-       .remove         = ingenic_nand_remove,
+       .remove_new     = ingenic_nand_remove,
        .driver = {
                .name   = DRV_NAME,
                .of_match_table = ingenic_nand_dt_match,
index 6f4cea81f97c0433eacaf9271d8da5c416ba97c6..a9909eb081244ed2002237a1ba42304c43cc8831 100644 (file)
@@ -706,7 +706,7 @@ err_of_node_put:
        return ret;
 }
 
-static int ebu_nand_remove(struct platform_device *pdev)
+static void ebu_nand_remove(struct platform_device *pdev)
 {
        struct ebu_nand_controller *ebu_host = platform_get_drvdata(pdev);
        int ret;
@@ -717,8 +717,6 @@ static int ebu_nand_remove(struct platform_device *pdev)
        ebu_nand_disable(&ebu_host->chip);
        ebu_dma_cleanup(ebu_host);
        clk_disable_unprepare(ebu_host->clk);
-
-       return 0;
 }
 
 static const struct of_device_id ebu_nand_match[] = {
@@ -729,7 +727,7 @@ MODULE_DEVICE_TABLE(of, ebu_nand_match);
 
 static struct platform_driver ebu_nand_driver = {
        .probe = ebu_nand_probe,
-       .remove = ebu_nand_remove,
+       .remove_new = ebu_nand_remove,
        .driver = {
                .name = "intel-nand-controller",
                .of_match_table = ebu_nand_match,
index ae7f6429a5f6425477b403fb87610b9d3ea6c0b6..b3136ae6f4e94e4410c646584495213480ef5ce2 100644 (file)
@@ -827,7 +827,7 @@ free_gpio:
 /*
  * Remove NAND device
  */
-static int lpc32xx_nand_remove(struct platform_device *pdev)
+static void lpc32xx_nand_remove(struct platform_device *pdev)
 {
        struct lpc32xx_nand_host *host = platform_get_drvdata(pdev);
        struct nand_chip *chip = &host->nand_chip;
@@ -846,8 +846,6 @@ static int lpc32xx_nand_remove(struct platform_device *pdev)
 
        lpc32xx_wp_enable(host);
        gpiod_put(host->wp_gpio);
-
-       return 0;
 }
 
 static int lpc32xx_nand_resume(struct platform_device *pdev)
@@ -889,7 +887,7 @@ MODULE_DEVICE_TABLE(of, lpc32xx_nand_match);
 
 static struct platform_driver lpc32xx_nand_driver = {
        .probe          = lpc32xx_nand_probe,
-       .remove         = lpc32xx_nand_remove,
+       .remove_new     = lpc32xx_nand_remove,
        .resume         = pm_ptr(lpc32xx_nand_resume),
        .suspend        = pm_ptr(lpc32xx_nand_suspend),
        .driver         = {
index 6918737346c95c8abc352a8ef5e3889cfc6c8632..3139b6107660c540ca2f93523462355eb7f65922 100644 (file)
@@ -946,7 +946,7 @@ enable_wp:
 /*
  * Remove NAND device.
  */
-static int lpc32xx_nand_remove(struct platform_device *pdev)
+static void lpc32xx_nand_remove(struct platform_device *pdev)
 {
        uint32_t tmp;
        struct lpc32xx_nand_host *host = platform_get_drvdata(pdev);
@@ -965,8 +965,6 @@ static int lpc32xx_nand_remove(struct platform_device *pdev)
 
        clk_disable_unprepare(host->clk);
        lpc32xx_wp_enable(host);
-
-       return 0;
 }
 
 static int lpc32xx_nand_resume(struct platform_device *pdev)
@@ -1015,7 +1013,7 @@ MODULE_DEVICE_TABLE(of, lpc32xx_nand_match);
 
 static struct platform_driver lpc32xx_nand_driver = {
        .probe          = lpc32xx_nand_probe,
-       .remove         = lpc32xx_nand_remove,
+       .remove_new     = lpc32xx_nand_remove,
        .resume         = pm_ptr(lpc32xx_nand_resume),
        .suspend        = pm_ptr(lpc32xx_nand_suspend),
        .driver         = {
index 3034916d2e252d73332f43fa163fd2a567c4fa17..afb424579f0b89777037726f54060fd21c2e0e73 100644 (file)
@@ -3004,7 +3004,7 @@ unprepare_core_clk:
        return ret;
 }
 
-static int marvell_nfc_remove(struct platform_device *pdev)
+static void marvell_nfc_remove(struct platform_device *pdev)
 {
        struct marvell_nfc *nfc = platform_get_drvdata(pdev);
 
@@ -3017,8 +3017,6 @@ static int marvell_nfc_remove(struct platform_device *pdev)
 
        clk_disable_unprepare(nfc->reg_clk);
        clk_disable_unprepare(nfc->core_clk);
-
-       return 0;
 }
 
 static int __maybe_unused marvell_nfc_suspend(struct device *dev)
@@ -3154,7 +3152,7 @@ static struct platform_driver marvell_nfc_driver = {
        },
        .id_table = marvell_nfc_platform_ids,
        .probe = marvell_nfc_probe,
-       .remove = marvell_nfc_remove,
+       .remove_new = marvell_nfc_remove,
 };
 module_platform_driver(marvell_nfc_driver);
 
index 5ee01231ac4cdc5dbb156851a2fdb6c13a402e07..24f1ad025cda8d3a8cf45804c04b0498cd88a41b 100644 (file)
@@ -1434,20 +1434,18 @@ err_clk:
        return ret;
 }
 
-static int meson_nfc_remove(struct platform_device *pdev)
+static void meson_nfc_remove(struct platform_device *pdev)
 {
        struct meson_nfc *nfc = platform_get_drvdata(pdev);
 
        meson_nfc_nand_chip_cleanup(nfc);
 
        meson_nfc_disable_clk(nfc);
-
-       return 0;
 }
 
 static struct platform_driver meson_nfc_driver = {
        .probe  = meson_nfc_probe,
-       .remove = meson_nfc_remove,
+       .remove_new = meson_nfc_remove,
        .driver = {
                .name  = "meson-nand",
                .of_match_table = meson_nfc_id_table,
index f68349cb7824a61b820e39cf71c80fb00298f6b4..ab05ee65702c85f5d9c0fc67a0312c3918b7eab1 100644 (file)
@@ -822,7 +822,7 @@ error:
        return retval;
 }
 
-static int mpc5121_nfc_remove(struct platform_device *op)
+static void mpc5121_nfc_remove(struct platform_device *op)
 {
        struct device *dev = &op->dev;
        struct mtd_info *mtd = dev_get_drvdata(dev);
@@ -832,8 +832,6 @@ static int mpc5121_nfc_remove(struct platform_device *op)
        WARN_ON(ret);
        nand_cleanup(mtd_to_nand(mtd));
        mpc5121_nfc_free(dev, mtd);
-
-       return 0;
 }
 
 static const struct of_device_id mpc5121_nfc_match[] = {
@@ -844,7 +842,7 @@ MODULE_DEVICE_TABLE(of, mpc5121_nfc_match);
 
 static struct platform_driver mpc5121_nfc_driver = {
        .probe          = mpc5121_nfc_probe,
-       .remove         = mpc5121_nfc_remove,
+       .remove_new     = mpc5121_nfc_remove,
        .driver         = {
                .name = DRV_NAME,
                .of_match_table = mpc5121_nfc_match,
index d540454cbbdfaf5470ed3b790e4677ff518d1513..b2fa6b2074ab1fe2515fac891e2f1afb7b37a2d5 100644 (file)
@@ -1601,7 +1601,7 @@ release_ecc:
        return ret;
 }
 
-static int mtk_nfc_remove(struct platform_device *pdev)
+static void mtk_nfc_remove(struct platform_device *pdev)
 {
        struct mtk_nfc *nfc = platform_get_drvdata(pdev);
        struct mtk_nfc_nand_chip *mtk_chip;
@@ -1620,8 +1620,6 @@ static int mtk_nfc_remove(struct platform_device *pdev)
 
        mtk_ecc_release(nfc->ecc);
        mtk_nfc_disable_clk(&nfc->clk);
-
-       return 0;
 }
 
 #ifdef CONFIG_PM_SLEEP
@@ -1663,7 +1661,7 @@ static SIMPLE_DEV_PM_OPS(mtk_nfc_pm_ops, mtk_nfc_suspend, mtk_nfc_resume);
 
 static struct platform_driver mtk_nfc_driver = {
        .probe  = mtk_nfc_probe,
-       .remove = mtk_nfc_remove,
+       .remove_new = mtk_nfc_remove,
        .driver = {
                .name  = MTK_NAME,
                .of_match_table = mtk_nfc_id_table,
index f6c96341b896c7e01c1d65aa794372ff6ff9d2be..3d4b2e8294ea6ba3bf990ca7af264024f1aadc66 100644 (file)
@@ -1599,16 +1599,6 @@ static inline int is_imx25_nfc(struct mxc_nand_host *host)
        return host->devtype_data == &imx25_nand_devtype_data;
 }
 
-static inline int is_imx51_nfc(struct mxc_nand_host *host)
-{
-       return host->devtype_data == &imx51_nand_devtype_data;
-}
-
-static inline int is_imx53_nfc(struct mxc_nand_host *host)
-{
-       return host->devtype_data == &imx53_nand_devtype_data;
-}
-
 static const struct of_device_id mxcnd_dt_ids[] = {
        { .compatible = "fsl,imx21-nand", .data = &imx21_nand_devtype_data, },
        { .compatible = "fsl,imx27-nand", .data = &imx27_nand_devtype_data, },
@@ -1831,7 +1821,7 @@ escan:
        return err;
 }
 
-static int mxcnd_remove(struct platform_device *pdev)
+static void mxcnd_remove(struct platform_device *pdev)
 {
        struct mxc_nand_host *host = platform_get_drvdata(pdev);
        struct nand_chip *chip = &host->nand;
@@ -1842,8 +1832,6 @@ static int mxcnd_remove(struct platform_device *pdev)
        nand_cleanup(chip);
        if (host->clk_act)
                clk_disable_unprepare(host->clk);
-
-       return 0;
 }
 
 static struct platform_driver mxcnd_driver = {
@@ -1852,7 +1840,7 @@ static struct platform_driver mxcnd_driver = {
                   .of_match_table = mxcnd_dt_ids,
        },
        .probe = mxcnd_probe,
-       .remove = mxcnd_remove,
+       .remove_new = mxcnd_remove,
 };
 module_platform_driver(mxcnd_driver);
 
index da10709939948053a9e703869bfc9e13f5702d99..be8050e84b4f1fa9cd8726fef4d78378e71023a1 100644 (file)
@@ -553,7 +553,7 @@ fail:
        return err;
 }
 
-static int mxic_nfc_remove(struct platform_device *pdev)
+static void mxic_nfc_remove(struct platform_device *pdev)
 {
        struct mxic_nand_ctlr *nfc = platform_get_drvdata(pdev);
        struct nand_chip *chip = &nfc->chip;
@@ -564,7 +564,6 @@ static int mxic_nfc_remove(struct platform_device *pdev)
        nand_cleanup(chip);
 
        mxic_nfc_clk_disable(nfc);
-       return 0;
 }
 
 static const struct of_device_id mxic_nfc_of_ids[] = {
@@ -575,7 +574,7 @@ MODULE_DEVICE_TABLE(of, mxic_nfc_of_ids);
 
 static struct platform_driver mxic_nfc_driver = {
        .probe = mxic_nfc_probe,
-       .remove = mxic_nfc_remove,
+       .remove_new = mxic_nfc_remove,
        .driver = {
                .name = "mxic-nfc",
                .of_match_table = mxic_nfc_of_ids,
index 0d4d4bbfdecea8e01215003bf16518086d736ce6..39076735a3fbb0d155ad95d6c3d555f4d73e6116 100644 (file)
@@ -728,8 +728,21 @@ static int hynix_nand_init(struct nand_chip *chip)
        return ret;
 }
 
+static void hynix_fixup_onfi_param_page(struct nand_chip *chip,
+                                       struct nand_onfi_params *p)
+{
+       /*
+        * Certain chips might report a 0 on sdr_timing_mode field
+        * (bytes 129-130). This has been seen on H27U4G8F2GDA-BI.
+        * According to ONFI specification, bit 0 of this field "shall be 1".
+        * Forcibly set this bit.
+        */
+       p->sdr_timing_modes |= cpu_to_le16(BIT(0));
+}
+
 const struct nand_manufacturer_ops hynix_nand_manuf_ops = {
        .detect = hynix_nand_decode_id,
        .init = hynix_nand_init,
        .cleanup = hynix_nand_cleanup,
+       .fixup_onfi_param_page = hynix_fixup_onfi_param_page,
 };
index 338d6b1a189eb69d112f069f1763554d97fbf239..57f3db32122d4d856c60e248ea45f0ddc58ba409 100644 (file)
@@ -240,7 +240,7 @@ static int ndfc_probe(struct platform_device *ofdev)
        return 0;
 }
 
-static int ndfc_remove(struct platform_device *ofdev)
+static void ndfc_remove(struct platform_device *ofdev)
 {
        struct ndfc_controller *ndfc = dev_get_drvdata(&ofdev->dev);
        struct nand_chip *chip = &ndfc->chip;
@@ -251,8 +251,6 @@ static int ndfc_remove(struct platform_device *ofdev)
        WARN_ON(ret);
        nand_cleanup(chip);
        kfree(mtd->name);
-
-       return 0;
 }
 
 static const struct of_device_id ndfc_match[] = {
@@ -267,7 +265,7 @@ static struct platform_driver ndfc_driver = {
                .of_match_table = ndfc_match,
        },
        .probe = ndfc_probe,
-       .remove = ndfc_remove,
+       .remove_new = ndfc_remove,
 };
 
 module_platform_driver(ndfc_driver);
index 4a9f2b6c772d463039b3d672444c6f01bbcb2fe0..db22b3af16d8a93e70655225b53334b99d476300 100644 (file)
@@ -2273,7 +2273,7 @@ return_error:
        return err;
 }
 
-static int omap_nand_remove(struct platform_device *pdev)
+static void omap_nand_remove(struct platform_device *pdev)
 {
        struct mtd_info *mtd = platform_get_drvdata(pdev);
        struct nand_chip *nand_chip = mtd_to_nand(mtd);
@@ -2285,7 +2285,6 @@ static int omap_nand_remove(struct platform_device *pdev)
                dma_release_channel(info->dma);
        WARN_ON(mtd_device_unregister(mtd));
        nand_cleanup(nand_chip);
-       return 0;
 }
 
 /* omap_nand_ids defined in linux/platform_data/mtd-nand-omap2.h */
@@ -2293,7 +2292,7 @@ MODULE_DEVICE_TABLE(of, omap_nand_ids);
 
 static struct platform_driver omap_nand_driver = {
        .probe          = omap_nand_probe,
-       .remove         = omap_nand_remove,
+       .remove_new     = omap_nand_remove,
        .driver         = {
                .name   = DRIVER_NAME,
                .of_match_table = omap_nand_ids,
index 4796a48e1012af88ec9a11aed9d7dbfcbc222906..6e1eac6644a66ee2b774565e0e2d15a31e417299 100644 (file)
@@ -422,11 +422,10 @@ static int elm_probe(struct platform_device *pdev)
        return ret;
 }
 
-static int elm_remove(struct platform_device *pdev)
+static void elm_remove(struct platform_device *pdev)
 {
        pm_runtime_put_sync(&pdev->dev);
        pm_runtime_disable(&pdev->dev);
-       return 0;
 }
 
 #ifdef CONFIG_PM_SLEEP
@@ -561,7 +560,7 @@ static struct platform_driver elm_driver = {
                .pm     = &elm_pm_ops,
        },
        .probe  = elm_probe,
-       .remove = elm_remove,
+       .remove_new = elm_remove,
 };
 
 module_platform_driver(elm_driver);
index 1bfecf502216056b304315e7c4034db9cdfb4eea..7e0313889b50180cf8b501c256fa2c445ca20688 100644 (file)
@@ -102,7 +102,6 @@ static int __init orion_nand_probe(struct platform_device *pdev)
        struct mtd_info *mtd;
        struct nand_chip *nc;
        struct orion_nand_data *board;
-       struct resource *res;
        void __iomem *io_base;
        int ret = 0;
        u32 val = 0;
@@ -119,8 +118,7 @@ static int __init orion_nand_probe(struct platform_device *pdev)
        info->controller.ops = &orion_nand_ops;
        nc->controller = &info->controller;
 
-       res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-       io_base = devm_ioremap_resource(&pdev->dev, res);
+       io_base = devm_platform_ioremap_resource(pdev, 0);
 
        if (IS_ERR(io_base))
                return PTR_ERR(io_base);
@@ -207,7 +205,7 @@ no_dev:
        return ret;
 }
 
-static int orion_nand_remove(struct platform_device *pdev)
+static void orion_nand_remove(struct platform_device *pdev)
 {
        struct orion_nand_info *info = platform_get_drvdata(pdev);
        struct nand_chip *chip = &info->chip;
@@ -219,8 +217,6 @@ static int orion_nand_remove(struct platform_device *pdev)
        nand_cleanup(chip);
 
        clk_disable_unprepare(info->clk);
-
-       return 0;
 }
 
 #ifdef CONFIG_OF
@@ -232,7 +228,7 @@ MODULE_DEVICE_TABLE(of, orion_nand_of_match_table);
 #endif
 
 static struct platform_driver orion_nand_driver = {
-       .remove         = orion_nand_remove,
+       .remove_new     = orion_nand_remove,
        .driver         = {
                .name   = "orion_nand",
                .of_match_table = of_match_ptr(orion_nand_of_match_table),
index cd112d45e0b5bd4caacba66b989ac20b4a2b7d81..e3c9807df1cd82f44fd0a6aee242360ec72a7660 100644 (file)
@@ -171,7 +171,7 @@ err_clk_unprepare:
        return err;
 }
 
-static int oxnas_nand_remove(struct platform_device *pdev)
+static void oxnas_nand_remove(struct platform_device *pdev)
 {
        struct oxnas_nand_ctrl *oxnas = platform_get_drvdata(pdev);
        struct nand_chip *chip;
@@ -184,8 +184,6 @@ static int oxnas_nand_remove(struct platform_device *pdev)
        }
 
        clk_disable_unprepare(oxnas->clk);
-
-       return 0;
 }
 
 static const struct of_device_id oxnas_nand_match[] = {
@@ -196,7 +194,7 @@ MODULE_DEVICE_TABLE(of, oxnas_nand_match);
 
 static struct platform_driver oxnas_nand_driver = {
        .probe  = oxnas_nand_probe,
-       .remove = oxnas_nand_remove,
+       .remove_new = oxnas_nand_remove,
        .driver = {
                .name           = "oxnas_nand",
                .of_match_table = oxnas_nand_match,
index f7ef6ca06ca92020a754b62a322f6803fb1c76cb..19b2c9d25863b166e3fdbe5f604314f0818f26d5 100644 (file)
@@ -197,7 +197,7 @@ static int pasemi_nand_probe(struct platform_device *ofdev)
        return err;
 }
 
-static int pasemi_nand_remove(struct platform_device *ofdev)
+static void pasemi_nand_remove(struct platform_device *ofdev)
 {
        struct pasemi_ddata *ddata = platform_get_drvdata(ofdev);
        struct mtd_info *pasemi_nand_mtd;
@@ -218,8 +218,6 @@ static int pasemi_nand_remove(struct platform_device *ofdev)
 
        /* Free the MTD device structure */
        kfree(ddata);
-
-       return 0;
 }
 
 static const struct of_device_id pasemi_nand_match[] =
@@ -239,7 +237,7 @@ static struct platform_driver pasemi_nand_driver =
                .of_match_table = pasemi_nand_match,
        },
        .probe          = pasemi_nand_probe,
-       .remove         = pasemi_nand_remove,
+       .remove_new     = pasemi_nand_remove,
 };
 
 module_platform_driver(pasemi_nand_driver);
index 3c6f6aff649f8689ca9fbf78938eb04ec6f5c26f..28b7bd7e22eb475c0b85fb502dc843b10c27f59b 100644 (file)
@@ -1163,13 +1163,11 @@ static int pl35x_nand_probe(struct platform_device *pdev)
        return 0;
 }
 
-static int pl35x_nand_remove(struct platform_device *pdev)
+static void pl35x_nand_remove(struct platform_device *pdev)
 {
        struct pl35x_nandc *nfc = platform_get_drvdata(pdev);
 
        pl35x_nand_chips_cleanup(nfc);
-
-       return 0;
 }
 
 static const struct of_device_id pl35x_nand_of_match[] = {
@@ -1180,7 +1178,7 @@ MODULE_DEVICE_TABLE(of, pl35x_nand_of_match);
 
 static struct platform_driver pl35x_nandc_driver = {
        .probe = pl35x_nand_probe,
-       .remove = pl35x_nand_remove,
+       .remove_new = pl35x_nand_remove,
        .driver = {
                .name = PL35X_NANDC_DRIVER_NAME,
                .of_match_table = pl35x_nand_of_match,
index 7e0d0a8dfd1ef5d1ae83a60f4c1868f112934594..b5c374b51ecdca71d7d3ef45594f62774045ed89 100644 (file)
@@ -122,7 +122,7 @@ out:
 /*
  * Remove a NAND device.
  */
-static int plat_nand_remove(struct platform_device *pdev)
+static void 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);
@@ -134,8 +134,6 @@ static int plat_nand_remove(struct platform_device *pdev)
        nand_cleanup(chip);
        if (pdata->ctrl.remove)
                pdata->ctrl.remove(pdev);
-
-       return 0;
 }
 
 static const struct of_device_id plat_nand_match[] = {
@@ -146,7 +144,7 @@ MODULE_DEVICE_TABLE(of, plat_nand_match);
 
 static struct platform_driver plat_nand_driver = {
        .probe  = plat_nand_probe,
-       .remove = plat_nand_remove,
+       .remove_new = plat_nand_remove,
        .driver = {
                .name           = "gen_nand",
                .of_match_table = plat_nand_match,
index 198a44794d2dc06a982a0759b477e8853d86a3fc..72d6168d8a1be0c8c7d139a1bcf758d0f387d2db 100644 (file)
@@ -3054,7 +3054,7 @@ static int qcom_nand_host_parse_boot_partitions(struct qcom_nand_controller *nan
        struct device *dev = nandc->dev;
        int partitions_count, i, j, ret;
 
-       if (!of_find_property(dn, "qcom,boot-partitions", NULL))
+       if (!of_property_present(dn, "qcom,boot-partitions"))
                return 0;
 
        partitions_count = of_property_count_u32_elems(dn, "qcom,boot-partitions");
@@ -3269,8 +3269,7 @@ static int qcom_nandc_probe(struct platform_device *pdev)
        if (ret)
                return ret;
 
-       res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-       nandc->base = devm_ioremap_resource(dev, res);
+       nandc->base = devm_platform_get_and_ioremap_resource(pdev, 0, &res);
        if (IS_ERR(nandc->base))
                return PTR_ERR(nandc->base);
 
@@ -3315,7 +3314,7 @@ err_core_clk:
        return ret;
 }
 
-static int qcom_nandc_remove(struct platform_device *pdev)
+static void qcom_nandc_remove(struct platform_device *pdev)
 {
        struct qcom_nand_controller *nandc = platform_get_drvdata(pdev);
        struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
@@ -3337,8 +3336,6 @@ static int qcom_nandc_remove(struct platform_device *pdev)
 
        dma_unmap_resource(&pdev->dev, nandc->base_dma, resource_size(res),
                           DMA_BIDIRECTIONAL, 0);
-
-       return 0;
 }
 
 static const struct qcom_nandc_props ipq806x_nandc_props = {
@@ -3405,7 +3402,7 @@ static struct platform_driver qcom_nandc_driver = {
                .of_match_table = qcom_nandc_of_match,
        },
        .probe   = qcom_nandc_probe,
-       .remove  = qcom_nandc_remove,
+       .remove_new = qcom_nandc_remove,
 };
 module_platform_driver(qcom_nandc_driver);
 
index 1620e25a1147ef62a0c4bc168f84ed6360049a6d..589021ea9eb2acf10bb8ccca557fc46aafe1803f 100644 (file)
@@ -1386,15 +1386,13 @@ dis_runtime_pm:
        return ret;
 }
 
-static int rnandc_remove(struct platform_device *pdev)
+static void rnandc_remove(struct platform_device *pdev)
 {
        struct rnandc *rnandc = platform_get_drvdata(pdev);
 
        rnandc_chips_cleanup(rnandc);
 
        pm_runtime_put(&pdev->dev);
-
-       return 0;
 }
 
 static const struct of_device_id rnandc_id_table[] = {
@@ -1410,7 +1408,7 @@ static struct platform_driver rnandc_driver = {
                .of_match_table = rnandc_id_table,
        },
        .probe = rnandc_probe,
-       .remove = rnandc_remove,
+       .remove_new = rnandc_remove,
 };
 module_platform_driver(rnandc_driver);
 
index f133985cc053a0703aed1e191b4d32310e516770..2312e27362cbef83b7686150da7a896f0c085f24 100644 (file)
@@ -1427,7 +1427,7 @@ release_nfc:
        return ret;
 }
 
-static int rk_nfc_remove(struct platform_device *pdev)
+static void rk_nfc_remove(struct platform_device *pdev)
 {
        struct rk_nfc *nfc = platform_get_drvdata(pdev);
 
@@ -1435,8 +1435,6 @@ static int rk_nfc_remove(struct platform_device *pdev)
        kfree(nfc->oob_buf);
        rk_nfc_chips_cleanup(nfc);
        rk_nfc_disable_clks(nfc);
-
-       return 0;
 }
 
 static int __maybe_unused rk_nfc_suspend(struct device *dev)
@@ -1476,7 +1474,7 @@ static const struct dev_pm_ops rk_nfc_pm_ops = {
 
 static struct platform_driver rk_nfc_driver = {
        .probe = rk_nfc_probe,
-       .remove = rk_nfc_remove,
+       .remove_new = rk_nfc_remove,
        .driver = {
                .name = "rockchip-nfc",
                .of_match_table = rk_nfc_id_table,
index 80d96f94d6cb6f07a5cdfc32d7f20bd575e9ed29..ac80aaf5b4e304f5faed7cabeff7099324482cf1 100644 (file)
@@ -709,12 +709,12 @@ static void s3c2440_nand_write_buf(struct nand_chip *this, const u_char *buf,
 
 /* device management functions */
 
-static int s3c24xx_nand_remove(struct platform_device *pdev)
+static void s3c24xx_nand_remove(struct platform_device *pdev)
 {
        struct s3c2410_nand_info *info = to_nand_info(pdev);
 
        if (info == NULL)
-               return 0;
+               return;
 
        /* Release all our mtds  and their partitions, then go through
         * freeing the resources used
@@ -735,8 +735,6 @@ static int s3c24xx_nand_remove(struct platform_device *pdev)
 
        if (!IS_ERR(info->clk))
                s3c2410_nand_clk_set_state(info, CLOCK_DISABLE);
-
-       return 0;
 }
 
 static int s3c2410_nand_add_partition(struct s3c2410_nand_info *info,
@@ -1218,7 +1216,7 @@ MODULE_DEVICE_TABLE(platform, s3c24xx_driver_ids);
 
 static struct platform_driver s3c24xx_nand_driver = {
        .probe          = s3c24xx_nand_probe,
-       .remove         = s3c24xx_nand_remove,
+       .remove_new     = s3c24xx_nand_remove,
        .suspend        = s3c24xx_nand_suspend,
        .resume         = s3c24xx_nand_resume,
        .id_table       = s3c24xx_driver_ids,
index a278829469d610d837ccd8b59d335590108341f7..63bf20c4171972ce2f0515661d7de51ec8ee1835 100644 (file)
@@ -1203,7 +1203,7 @@ err_chip:
        return ret;
 }
 
-static int flctl_remove(struct platform_device *pdev)
+static void flctl_remove(struct platform_device *pdev)
 {
        struct sh_flctl *flctl = platform_get_drvdata(pdev);
        struct nand_chip *chip = &flctl->chip;
@@ -1214,12 +1214,10 @@ static int flctl_remove(struct platform_device *pdev)
        WARN_ON(ret);
        nand_cleanup(chip);
        pm_runtime_disable(&pdev->dev);
-
-       return 0;
 }
 
 static struct platform_driver flctl_driver = {
-       .remove         = flctl_remove,
+       .remove_new     = flctl_remove,
        .driver = {
                .name   = "sh_flctl",
                .of_match_table = of_flctl_match,
index 52ce5162538a406f2b5cc966a64de613000b1cd6..2402dc5465d5473405372e6d0c66d7785f9d556d 100644 (file)
@@ -210,7 +210,7 @@ err_get_res:
 /*
  * Clean up routine
  */
-static int sharpsl_nand_remove(struct platform_device *pdev)
+static void sharpsl_nand_remove(struct platform_device *pdev)
 {
        struct sharpsl_nand *sharpsl = platform_get_drvdata(pdev);
        struct nand_chip *chip = &sharpsl->chip;
@@ -227,8 +227,6 @@ static int sharpsl_nand_remove(struct platform_device *pdev)
 
        /* Free the driver's structure */
        kfree(sharpsl);
-
-       return 0;
 }
 
 static struct platform_driver sharpsl_nand_driver = {
@@ -236,7 +234,7 @@ static struct platform_driver sharpsl_nand_driver = {
                .name   = "sharpsl-nand",
        },
        .probe          = sharpsl_nand_probe,
-       .remove         = sharpsl_nand_remove,
+       .remove_new     = sharpsl_nand_remove,
 };
 
 module_platform_driver(sharpsl_nand_driver);
index fb39cc7ebce03686af4d330df362719ade27a900..a8b720ffe9e843b30cd15bcaa9b6a1c72d684173 100644 (file)
@@ -201,7 +201,7 @@ out:
 /*
  * Remove a NAND device.
  */
-static int socrates_nand_remove(struct platform_device *ofdev)
+static void socrates_nand_remove(struct platform_device *ofdev)
 {
        struct socrates_nand_host *host = dev_get_drvdata(&ofdev->dev);
        struct nand_chip *chip = &host->nand_chip;
@@ -212,8 +212,6 @@ static int socrates_nand_remove(struct platform_device *ofdev)
        nand_cleanup(chip);
 
        iounmap(host->io_base);
-
-       return 0;
 }
 
 static const struct of_device_id socrates_nand_match[] =
@@ -232,7 +230,7 @@ static struct platform_driver socrates_nand_driver = {
                .of_match_table = socrates_nand_match,
        },
        .probe          = socrates_nand_probe,
-       .remove         = socrates_nand_remove,
+       .remove_new     = socrates_nand_remove,
 };
 
 module_platform_driver(socrates_nand_driver);
index 5d627048c420de5d2516b2135736bb2aec65780b..e3d09dd5963bc15fa346db812b6fb18e650b69c6 100644 (file)
@@ -2021,7 +2021,7 @@ err_clk_disable:
        return ret;
 }
 
-static int stm32_fmc2_nfc_remove(struct platform_device *pdev)
+static void stm32_fmc2_nfc_remove(struct platform_device *pdev)
 {
        struct stm32_fmc2_nfc *nfc = platform_get_drvdata(pdev);
        struct stm32_fmc2_nand *nand = &nfc->nand;
@@ -2045,8 +2045,6 @@ static int stm32_fmc2_nfc_remove(struct platform_device *pdev)
        clk_disable_unprepare(nfc->clk);
 
        stm32_fmc2_nfc_wp_enable(nand);
-
-       return 0;
 }
 
 static int __maybe_unused stm32_fmc2_nfc_suspend(struct device *dev)
@@ -2103,7 +2101,7 @@ MODULE_DEVICE_TABLE(of, stm32_fmc2_nfc_match);
 
 static struct platform_driver stm32_fmc2_nfc_driver = {
        .probe  = stm32_fmc2_nfc_probe,
-       .remove = stm32_fmc2_nfc_remove,
+       .remove_new = stm32_fmc2_nfc_remove,
        .driver = {
                .name = "stm32_fmc2_nfc",
                .of_match_table = stm32_fmc2_nfc_match,
index 13e3e0198d15328b1898094e67a828f8b3f179ce..9884304634f68a4a242cec3a81114f58c9d98ebf 100644 (file)
@@ -2173,7 +2173,7 @@ out_ahb_clk_unprepare:
        return ret;
 }
 
-static int sunxi_nfc_remove(struct platform_device *pdev)
+static void sunxi_nfc_remove(struct platform_device *pdev)
 {
        struct sunxi_nfc *nfc = platform_get_drvdata(pdev);
 
@@ -2185,8 +2185,6 @@ static int sunxi_nfc_remove(struct platform_device *pdev)
                dma_release_channel(nfc->dmac);
        clk_disable_unprepare(nfc->mod_clk);
        clk_disable_unprepare(nfc->ahb_clk);
-
-       return 0;
 }
 
 static const struct sunxi_nfc_caps sunxi_nfc_a10_caps = {
@@ -2219,7 +2217,7 @@ static struct platform_driver sunxi_nfc_driver = {
                .of_match_table = sunxi_nfc_ids,
        },
        .probe = sunxi_nfc_probe,
-       .remove = sunxi_nfc_remove,
+       .remove_new = sunxi_nfc_remove,
 };
 module_platform_driver(sunxi_nfc_driver);
 
index a9b9031ce61676947fe0dd7f21a8875db71b5978..eb0b9d16e8dae98e856cc1737da85c82f850f1d4 100644 (file)
@@ -1220,7 +1220,7 @@ err_dis_pm:
        return err;
 }
 
-static int tegra_nand_remove(struct platform_device *pdev)
+static void tegra_nand_remove(struct platform_device *pdev)
 {
        struct tegra_nand_controller *ctrl = platform_get_drvdata(pdev);
        struct nand_chip *chip = ctrl->chip;
@@ -1232,8 +1232,6 @@ static int tegra_nand_remove(struct platform_device *pdev)
 
        pm_runtime_put_sync_suspend(ctrl->dev);
        pm_runtime_force_suspend(ctrl->dev);
-
-       return 0;
 }
 
 static int __maybe_unused tegra_nand_runtime_resume(struct device *dev)
@@ -1277,7 +1275,7 @@ static struct platform_driver tegra_nand_driver = {
                .pm = &tegra_nand_pm,
        },
        .probe = tegra_nand_probe,
-       .remove = tegra_nand_remove,
+       .remove_new = tegra_nand_remove,
 };
 module_platform_driver(tegra_nand_driver);
 
index b643332ea1ff1e8bba39fba0b7ca43a858c82f83..86522048e2714ada70704c208f3e97e6721723c4 100644 (file)
@@ -909,7 +909,7 @@ err_disable_clk:
        return err;
 }
 
-static int vf610_nfc_remove(struct platform_device *pdev)
+static void vf610_nfc_remove(struct platform_device *pdev)
 {
        struct vf610_nfc *nfc = platform_get_drvdata(pdev);
        struct nand_chip *chip = &nfc->chip;
@@ -919,7 +919,6 @@ static int vf610_nfc_remove(struct platform_device *pdev)
        WARN_ON(ret);
        nand_cleanup(chip);
        clk_disable_unprepare(nfc->clk);
-       return 0;
 }
 
 #ifdef CONFIG_PM_SLEEP
@@ -955,7 +954,7 @@ static struct platform_driver vf610_nfc_driver = {
                .pm     = &vf610_nfc_pm_ops,
        },
        .probe          = vf610_nfc_probe,
-       .remove         = vf610_nfc_remove,
+       .remove_new     = vf610_nfc_remove,
 };
 
 module_platform_driver(vf610_nfc_driver);
index 035b82aa2f4a2b49f966048b87e0c89e6305bb8b..6b1e2a2bba15c1ab71a881395aa4c2849a4669cd 100644 (file)
@@ -238,7 +238,7 @@ static int xway_nand_probe(struct platform_device *pdev)
 /*
  * Remove a NAND device.
  */
-static int xway_nand_remove(struct platform_device *pdev)
+static void xway_nand_remove(struct platform_device *pdev)
 {
        struct xway_nand_data *data = platform_get_drvdata(pdev);
        struct nand_chip *chip = &data->chip;
@@ -247,8 +247,6 @@ static int xway_nand_remove(struct platform_device *pdev)
        ret = mtd_device_unregister(nand_to_mtd(chip));
        WARN_ON(ret);
        nand_cleanup(chip);
-
-       return 0;
 }
 
 static const struct of_device_id xway_nand_match[] = {
@@ -258,7 +256,7 @@ static const struct of_device_id xway_nand_match[] = {
 
 static struct platform_driver xway_nand_driver = {
        .probe  = xway_nand_probe,
-       .remove = xway_nand_remove,
+       .remove_new = xway_nand_remove,
        .driver = {
                .name           = "lantiq,nand-xway",
                .of_match_table = xway_nand_match,
index 4ec973b8b6bf10f6b0031babb58854353171014e..cd8b66bf77405cae2cb0fa311802cc05e1ee44da 100644 (file)
@@ -1,3 +1,4 @@
 # SPDX-License-Identifier: GPL-2.0
-spinand-objs := core.o alliancememory.o ato.o gigadevice.o macronix.o micron.o paragon.o toshiba.o winbond.o xtx.o
+spinand-objs := core.o alliancememory.o ato.o esmt.o gigadevice.o macronix.o
+spinand-objs += micron.o paragon.o toshiba.o winbond.o xtx.o
 obj-$(CONFIG_MTD_SPI_NAND) += spinand.o
index 638391f77d8c2302fe97a7dcd57d362db504564a..393ff37f0d23c15567765457a248ac9c0cbbdb77 100644 (file)
@@ -939,6 +939,7 @@ static const struct nand_ops spinand_ops = {
 static const struct spinand_manufacturer *spinand_manufacturers[] = {
        &alliancememory_spinand_manufacturer,
        &ato_spinand_manufacturer,
+       &esmt_c8_spinand_manufacturer,
        &gigadevice_spinand_manufacturer,
        &macronix_spinand_manufacturer,
        &micron_spinand_manufacturer,
diff --git a/drivers/mtd/nand/spi/esmt.c b/drivers/mtd/nand/spi/esmt.c
new file mode 100644 (file)
index 0000000..1a3ffb9
--- /dev/null
@@ -0,0 +1,135 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Author:
+ *     Chuanhong Guo <gch981213@gmail.com> - the main driver logic
+ *     Martin Kurbanov <mmkurbanov@sberdevices.ru> - OOB layout
+ */
+
+#include <linux/device.h>
+#include <linux/kernel.h>
+#include <linux/mtd/spinand.h>
+
+/* ESMT uses GigaDevice 0xc8 JECDEC ID on some SPI NANDs */
+#define SPINAND_MFR_ESMT_C8                    0xc8
+
+static SPINAND_OP_VARIANTS(read_cache_variants,
+                          SPINAND_PAGE_READ_FROM_CACHE_X4_OP(0, 1, NULL, 0),
+                          SPINAND_PAGE_READ_FROM_CACHE_X2_OP(0, 1, NULL, 0),
+                          SPINAND_PAGE_READ_FROM_CACHE_OP(true, 0, 1, NULL, 0),
+                          SPINAND_PAGE_READ_FROM_CACHE_OP(false, 0, 1, NULL, 0));
+
+static SPINAND_OP_VARIANTS(write_cache_variants,
+                          SPINAND_PROG_LOAD_X4(true, 0, NULL, 0),
+                          SPINAND_PROG_LOAD(true, 0, NULL, 0));
+
+static SPINAND_OP_VARIANTS(update_cache_variants,
+                          SPINAND_PROG_LOAD_X4(false, 0, NULL, 0),
+                          SPINAND_PROG_LOAD(false, 0, NULL, 0));
+
+/*
+ * OOB spare area map (64 bytes)
+ *
+ * Bad Block Markers
+ * filled by HW and kernel                 Reserved
+ *   |                 +-----------------------+-----------------------+
+ *   |                 |                       |                       |
+ *   |                 |    OOB free data Area |non ECC protected      |
+ *   |   +-------------|-----+-----------------|-----+-----------------|-----+
+ *   |   |             |     |                 |     |                 |     |
+ * +-|---|----------+--|-----|--------------+--|-----|--------------+--|-----|--------------+
+ * | |   | section0 |  |     |    section1  |  |     |    section2  |  |     |    section3  |
+ * +-v-+-v-+---+----+--v--+--v--+-----+-----+--v--+--v--+-----+-----+--v--+--v--+-----+-----+
+ * |   |   |   |    |     |     |     |     |     |     |     |     |     |     |     |     |
+ * |0:1|2:3|4:7|8:15|16:17|18:19|20:23|24:31|32:33|34:35|36:39|40:47|48:49|50:51|52:55|56:63|
+ * |   |   |   |    |     |     |     |     |     |     |     |     |     |     |     |     |
+ * +---+---+-^-+--^-+-----+-----+--^--+--^--+-----+-----+--^--+--^--+-----+-----+--^--+--^--+
+ *           |    |                |     |                 |     |                 |     |
+ *           |    +----------------|-----+-----------------|-----+-----------------|-----+
+ *           |             ECC Area|(Main + Spare) - filled|by ESMT NAND HW        |
+ *           |                     |                       |                       |
+ *           +---------------------+-----------------------+-----------------------+
+ *                         OOB ECC protected Area - not used due to
+ *                         partial programming from some filesystems
+ *                             (like JFFS2 with cleanmarkers)
+ */
+
+#define ESMT_OOB_SECTION_COUNT                 4
+#define ESMT_OOB_SECTION_SIZE(nand) \
+       (nanddev_per_page_oobsize(nand) / ESMT_OOB_SECTION_COUNT)
+#define ESMT_OOB_FREE_SIZE(nand) \
+       (ESMT_OOB_SECTION_SIZE(nand) / 2)
+#define ESMT_OOB_ECC_SIZE(nand) \
+       (ESMT_OOB_SECTION_SIZE(nand) - ESMT_OOB_FREE_SIZE(nand))
+#define ESMT_OOB_BBM_SIZE                      2
+
+static int f50l1g41lb_ooblayout_ecc(struct mtd_info *mtd, int section,
+                                   struct mtd_oob_region *region)
+{
+       struct nand_device *nand = mtd_to_nanddev(mtd);
+
+       if (section >= ESMT_OOB_SECTION_COUNT)
+               return -ERANGE;
+
+       region->offset = section * ESMT_OOB_SECTION_SIZE(nand) +
+                        ESMT_OOB_FREE_SIZE(nand);
+       region->length = ESMT_OOB_ECC_SIZE(nand);
+
+       return 0;
+}
+
+static int f50l1g41lb_ooblayout_free(struct mtd_info *mtd, int section,
+                                    struct mtd_oob_region *region)
+{
+       struct nand_device *nand = mtd_to_nanddev(mtd);
+
+       if (section >= ESMT_OOB_SECTION_COUNT)
+               return -ERANGE;
+
+       /*
+        * Reserve space for bad blocks markers (section0) and
+        * reserved bytes (sections 1-3)
+        */
+       region->offset = section * ESMT_OOB_SECTION_SIZE(nand) + 2;
+
+       /* Use only 2 non-protected ECC bytes per each OOB section */
+       region->length = 2;
+
+       return 0;
+}
+
+static const struct mtd_ooblayout_ops f50l1g41lb_ooblayout = {
+       .ecc = f50l1g41lb_ooblayout_ecc,
+       .free = f50l1g41lb_ooblayout_free,
+};
+
+static const struct spinand_info esmt_c8_spinand_table[] = {
+       SPINAND_INFO("F50L1G41LB",
+                    SPINAND_ID(SPINAND_READID_METHOD_OPCODE_ADDR, 0x01),
+                    NAND_MEMORG(1, 2048, 64, 64, 1024, 20, 1, 1, 1),
+                    NAND_ECCREQ(1, 512),
+                    SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
+                                             &write_cache_variants,
+                                             &update_cache_variants),
+                    0,
+                    SPINAND_ECCINFO(&f50l1g41lb_ooblayout, NULL)),
+       SPINAND_INFO("F50D1G41LB",
+                    SPINAND_ID(SPINAND_READID_METHOD_OPCODE_ADDR, 0x11),
+                    NAND_MEMORG(1, 2048, 64, 64, 1024, 20, 1, 1, 1),
+                    NAND_ECCREQ(1, 512),
+                    SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
+                                             &write_cache_variants,
+                                             &update_cache_variants),
+                    0,
+                    SPINAND_ECCINFO(&f50l1g41lb_ooblayout, NULL)),
+};
+
+static const struct spinand_manufacturer_ops esmt_spinand_manuf_ops = {
+};
+
+const struct spinand_manufacturer esmt_c8_spinand_manufacturer = {
+       .id = SPINAND_MFR_ESMT_C8,
+       .name = "ESMT",
+       .chips = esmt_c8_spinand_table,
+       .nchips = ARRAY_SIZE(esmt_c8_spinand_table),
+       .ops = &esmt_spinand_manuf_ops,
+};
index b20e0c38b517d0b7fad959a0939043d11f686888..60738edcd5d561d54bb33466c6862d016ed96361 100644 (file)
@@ -149,7 +149,7 @@ config MTD_PARSER_TRX
 
 config MTD_SHARPSL_PARTS
        tristate "Sharp SL Series NAND flash partition parser"
-       depends on MTD_NAND_SHARPSL || MTD_NAND_TMIO || COMPILE_TEST
+       depends on MTD_NAND_SHARPSL || COMPILE_TEST
        help
          This provides the read-only FTL logic necessary to read the partition
          table from the NAND flash of Sharp SL Series (Zaurus) and the MTD
index f8d4be9c587ac3e12b11a47bdfcdc823058ab705..5159d692f9ce5fc3c7b6979073b4e713d2a60b49 100644 (file)
@@ -1075,7 +1075,7 @@ static inline void nand_op_trace(const char *prefix,
  * @exec_op:    controller specific method to execute NAND operations.
  *              This method replaces chip->legacy.cmdfunc(),
  *              chip->legacy.{read,write}_{buf,byte,word}(),
- *              chip->legacy.dev_ready() and chip->legacy.waifunc().
+ *              chip->legacy.dev_ready() and chip->legacy.waitfunc().
  * @setup_interface: setup the data interface and timing. If chipnr is set to
  *                  %NAND_DATA_IFACE_CHECK_ONLY this means the configuration
  *                  should not be applied but only checked.
index 01be9f0f008a3f547b708136ada26a99b040919d..3e285c09d16d95dba7271a53ee3e3d7cf73bc107 100644 (file)
@@ -262,6 +262,7 @@ struct spinand_manufacturer {
 /* SPI NAND manufacturers */
 extern const struct spinand_manufacturer alliancememory_spinand_manufacturer;
 extern const struct spinand_manufacturer ato_spinand_manufacturer;
+extern const struct spinand_manufacturer esmt_c8_spinand_manufacturer;
 extern const struct spinand_manufacturer gigadevice_spinand_manufacturer;
 extern const struct spinand_manufacturer macronix_spinand_manufacturer;
 extern const struct spinand_manufacturer micron_spinand_manufacturer;