aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mtd/nand/txx9ndfmc.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2013-09-09 13:33:19 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2013-09-09 13:33:19 -0400
commitef9a61bef917e38f8e096f6df303329aed6cf467 (patch)
tree31cfe2444d0270e77ff8ef792df11591fed6075c /drivers/mtd/nand/txx9ndfmc.c
parentb5f0998cae3d7ea56d3d8377e46328fe972b9546 (diff)
parent6c3b88970175e18a67eb8e55c4eba10614d0d5dc (diff)
Merge tag 'for-linus-20130909' of git://git.infradead.org/linux-mtd
Pull mtd updates from David Woodhouse: - factor out common code from MTD tests - nand-gpio cleanup and portability to non-ARM - m25p80 support for 4-byte addressing chips, other new chips - pxa3xx cleanup and support for new platforms - remove obsolete alauda, octagon-5066 drivers - erase/write support for bcm47xxsflash - improve detection of ECC requirements for NAND, controller setup - NFC acceleration support for atmel-nand, read/write via SRAM - etc * tag 'for-linus-20130909' of git://git.infradead.org/linux-mtd: (184 commits) mtd: chips: Add support for PMC SPI Flash chips in m25p80.c mtd: ofpart: use for_each_child_of_node() macro mtd: mtdswap: replace strict_strtoul() with kstrtoul() mtd cs553x_nand: use kzalloc() instead of memset mtd: atmel_nand: fix error return code in atmel_nand_probe() mtd: bcm47xxsflash: writing support mtd: bcm47xxsflash: implement erasing support mtd: bcm47xxsflash: convert to module_platform_driver instead of init/exit mtd: bcm47xxsflash: convert kzalloc to avoid invalid access mtd: remove alauda driver mtd: nand: mxc_nand: mark 'const' properly mtd: maps: cfi_flagadm: add missing __iomem annotation mtd: spear_smi: add missing __iomem annotation mtd: r852: Staticize local symbols mtd: nandsim: Staticize local symbols mtd: impa7: add missing __iomem annotation mtd: sm_ftl: Staticize local symbols mtd: m25p80: add support for mr25h10 mtd: m25p80: make CONFIG_M25PXX_USE_FAST_READ safe to enable mtd: m25p80: Pass flags through CAT25_INFO macro ...
Diffstat (limited to 'drivers/mtd/nand/txx9ndfmc.c')
-rw-r--r--drivers/mtd/nand/txx9ndfmc.c13
1 files changed, 5 insertions, 8 deletions
diff --git a/drivers/mtd/nand/txx9ndfmc.c b/drivers/mtd/nand/txx9ndfmc.c
index 7ed654c68b08..235714a421dd 100644
--- a/drivers/mtd/nand/txx9ndfmc.c
+++ b/drivers/mtd/nand/txx9ndfmc.c
@@ -87,7 +87,7 @@ static struct platform_device *mtd_to_platdev(struct mtd_info *mtd)
87static void __iomem *ndregaddr(struct platform_device *dev, unsigned int reg) 87static void __iomem *ndregaddr(struct platform_device *dev, unsigned int reg)
88{ 88{
89 struct txx9ndfmc_drvdata *drvdata = platform_get_drvdata(dev); 89 struct txx9ndfmc_drvdata *drvdata = platform_get_drvdata(dev);
90 struct txx9ndfmc_platform_data *plat = dev->dev.platform_data; 90 struct txx9ndfmc_platform_data *plat = dev_get_platdata(&dev->dev);
91 91
92 return drvdata->base + (reg << plat->shift); 92 return drvdata->base + (reg << plat->shift);
93} 93}
@@ -138,7 +138,7 @@ static void txx9ndfmc_cmd_ctrl(struct mtd_info *mtd, int cmd,
138 struct nand_chip *chip = mtd->priv; 138 struct nand_chip *chip = mtd->priv;
139 struct txx9ndfmc_priv *txx9_priv = chip->priv; 139 struct txx9ndfmc_priv *txx9_priv = chip->priv;
140 struct platform_device *dev = txx9_priv->dev; 140 struct platform_device *dev = txx9_priv->dev;
141 struct txx9ndfmc_platform_data *plat = dev->dev.platform_data; 141 struct txx9ndfmc_platform_data *plat = dev_get_platdata(&dev->dev);
142 142
143 if (ctrl & NAND_CTRL_CHANGE) { 143 if (ctrl & NAND_CTRL_CHANGE) {
144 u32 mcr = txx9ndfmc_read(dev, TXX9_NDFMCR); 144 u32 mcr = txx9ndfmc_read(dev, TXX9_NDFMCR);
@@ -225,7 +225,7 @@ static void txx9ndfmc_enable_hwecc(struct mtd_info *mtd, int mode)
225 225
226static void txx9ndfmc_initialize(struct platform_device *dev) 226static void txx9ndfmc_initialize(struct platform_device *dev)
227{ 227{
228 struct txx9ndfmc_platform_data *plat = dev->dev.platform_data; 228 struct txx9ndfmc_platform_data *plat = dev_get_platdata(&dev->dev);
229 struct txx9ndfmc_drvdata *drvdata = platform_get_drvdata(dev); 229 struct txx9ndfmc_drvdata *drvdata = platform_get_drvdata(dev);
230 int tmout = 100; 230 int tmout = 100;
231 231
@@ -274,19 +274,17 @@ static int txx9ndfmc_nand_scan(struct mtd_info *mtd)
274 274
275static int __init txx9ndfmc_probe(struct platform_device *dev) 275static int __init txx9ndfmc_probe(struct platform_device *dev)
276{ 276{
277 struct txx9ndfmc_platform_data *plat = dev->dev.platform_data; 277 struct txx9ndfmc_platform_data *plat = dev_get_platdata(&dev->dev);
278 int hold, spw; 278 int hold, spw;
279 int i; 279 int i;
280 struct txx9ndfmc_drvdata *drvdata; 280 struct txx9ndfmc_drvdata *drvdata;
281 unsigned long gbusclk = plat->gbus_clock; 281 unsigned long gbusclk = plat->gbus_clock;
282 struct resource *res; 282 struct resource *res;
283 283
284 res = platform_get_resource(dev, IORESOURCE_MEM, 0);
285 if (!res)
286 return -ENODEV;
287 drvdata = devm_kzalloc(&dev->dev, sizeof(*drvdata), GFP_KERNEL); 284 drvdata = devm_kzalloc(&dev->dev, sizeof(*drvdata), GFP_KERNEL);
288 if (!drvdata) 285 if (!drvdata)
289 return -ENOMEM; 286 return -ENOMEM;
287 res = platform_get_resource(dev, IORESOURCE_MEM, 0);
290 drvdata->base = devm_ioremap_resource(&dev->dev, res); 288 drvdata->base = devm_ioremap_resource(&dev->dev, res);
291 if (IS_ERR(drvdata->base)) 289 if (IS_ERR(drvdata->base))
292 return PTR_ERR(drvdata->base); 290 return PTR_ERR(drvdata->base);
@@ -387,7 +385,6 @@ static int __exit txx9ndfmc_remove(struct platform_device *dev)
387 struct txx9ndfmc_drvdata *drvdata = platform_get_drvdata(dev); 385 struct txx9ndfmc_drvdata *drvdata = platform_get_drvdata(dev);
388 int i; 386 int i;
389 387
390 platform_set_drvdata(dev, NULL);
391 if (!drvdata) 388 if (!drvdata)
392 return 0; 389 return 0;
393 for (i = 0; i < MAX_TXX9NDFMC_DEV; i++) { 390 for (i = 0; i < MAX_TXX9NDFMC_DEV; i++) {