Merge tag 'for-linus-3.4' of git://git.infradead.org/mtd-2.6
Pull MTD changes from David Woodhouse: - Artem's cleanup of the MTD API continues apace. - Fixes and improvements for ST FSMC and SuperH FLCTL NAND, amongst others. - More work on DiskOnChip G3, new driver for DiskOnChip G4. - Clean up debug/warning printks in JFFS2 to use pr_<level>. Fix up various trivial conflicts, largely due to changes in calling conventions for things like dmaengine_prep_slave_sg() (new inline wrapper to hide new parameter, clashing with rewrite of previously last parameter that used to be an 'append' flag, and is now a bitmap of 'unsigned long flags'). (Also some header file fallout - like so many merges this merge window - and silly conflicts with sparse fixes) * tag 'for-linus-3.4' of git://git.infradead.org/mtd-2.6: (120 commits) mtd: docg3 add protection against concurrency mtd: docg3 refactor cascade floors structure mtd: docg3 increase write/erase timeout mtd: docg3 fix inbound calculations mtd: nand: gpmi: fix function annotations mtd: phram: fix section mismatch for phram_setup mtd: unify initialization of erase_info->fail_addr mtd: support ONFI multi lun NAND mtd: sm_ftl: fix typo in major number. mtd: add device-tree support to spear_smi mtd: spear_smi: Remove default partition information from driver mtd: Add device-tree support to fsmc_nand mtd: fix section mismatch for doc_probe_device mtd: nand/fsmc: Remove sparse warnings and errors mtd: nand/fsmc: Add DMA support mtd: nand/fsmc: Access the NAND device word by word whenever possible mtd: nand/fsmc: Use dev_err to report error scenario mtd: nand/fsmc: Use devm routines mtd: nand/fsmc: Modify fsmc driver to accept nand timing parameters via platform mtd: fsmc_nand: add pm callbacks to support hibernation ...
This commit is contained in:
@@ -70,9 +70,9 @@ static int __devinit generic_onenand_probe(struct platform_device *pdev)
|
||||
goto out_iounmap;
|
||||
}
|
||||
|
||||
err = mtd_device_parse_register(&info->mtd, NULL, 0,
|
||||
pdata ? pdata->parts : NULL,
|
||||
pdata ? pdata->nr_parts : 0);
|
||||
err = mtd_device_parse_register(&info->mtd, NULL, NULL,
|
||||
pdata ? pdata->parts : NULL,
|
||||
pdata ? pdata->nr_parts : 0);
|
||||
|
||||
platform_set_drvdata(pdev, info);
|
||||
|
||||
|
@@ -751,9 +751,9 @@ static int __devinit omap2_onenand_probe(struct platform_device *pdev)
|
||||
if ((r = onenand_scan(&c->mtd, 1)) < 0)
|
||||
goto err_release_regulator;
|
||||
|
||||
r = mtd_device_parse_register(&c->mtd, NULL, 0,
|
||||
pdata ? pdata->parts : NULL,
|
||||
pdata ? pdata->nr_parts : 0);
|
||||
r = mtd_device_parse_register(&c->mtd, NULL, NULL,
|
||||
pdata ? pdata->parts : NULL,
|
||||
pdata ? pdata->nr_parts : 0);
|
||||
if (r)
|
||||
goto err_release_onenand;
|
||||
|
||||
|
@@ -1753,16 +1753,6 @@ static int onenand_panic_write(struct mtd_info *mtd, loff_t to, size_t len,
|
||||
pr_debug("%s: to = 0x%08x, len = %i\n", __func__, (unsigned int)to,
|
||||
(int)len);
|
||||
|
||||
/* Initialize retlen, in case of early exit */
|
||||
*retlen = 0;
|
||||
|
||||
/* Do not allow writes past end of device */
|
||||
if (unlikely((to + len) > mtd->size)) {
|
||||
printk(KERN_ERR "%s: Attempt write to past end of device\n",
|
||||
__func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* Reject writes, which are not page aligned */
|
||||
if (unlikely(NOTALIGNED(to) || NOTALIGNED(len))) {
|
||||
printk(KERN_ERR "%s: Attempt to write not page aligned data\n",
|
||||
@@ -1890,13 +1880,6 @@ static int onenand_write_ops_nolock(struct mtd_info *mtd, loff_t to,
|
||||
ops->retlen = 0;
|
||||
ops->oobretlen = 0;
|
||||
|
||||
/* Do not allow writes past end of device */
|
||||
if (unlikely((to + len) > mtd->size)) {
|
||||
printk(KERN_ERR "%s: Attempt write to past end of device\n",
|
||||
__func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* Reject writes, which are not page aligned */
|
||||
if (unlikely(NOTALIGNED(to) || NOTALIGNED(len))) {
|
||||
printk(KERN_ERR "%s: Attempt to write not page aligned data\n",
|
||||
@@ -2493,12 +2476,6 @@ static int onenand_erase(struct mtd_info *mtd, struct erase_info *instr)
|
||||
(unsigned long long)instr->addr,
|
||||
(unsigned long long)instr->len);
|
||||
|
||||
/* Do not allow erase past end of device */
|
||||
if (unlikely((len + addr) > mtd->size)) {
|
||||
printk(KERN_ERR "%s: Erase past end of device\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (FLEXONENAND(this)) {
|
||||
/* Find the eraseregion of this address */
|
||||
int i = flexonenand_region(mtd, addr);
|
||||
@@ -2525,8 +2502,6 @@ static int onenand_erase(struct mtd_info *mtd, struct erase_info *instr)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
instr->fail_addr = MTD_FAIL_ADDR_UNKNOWN;
|
||||
|
||||
/* Grab the lock and see if the device is available */
|
||||
onenand_get_device(mtd, FL_ERASING);
|
||||
|
||||
@@ -4103,33 +4078,34 @@ int onenand_scan(struct mtd_info *mtd, int maxchips)
|
||||
mtd->oobavail = this->ecclayout->oobavail;
|
||||
|
||||
mtd->ecclayout = this->ecclayout;
|
||||
mtd->ecc_strength = 1;
|
||||
|
||||
/* Fill in remaining MTD driver data */
|
||||
mtd->type = ONENAND_IS_MLC(this) ? MTD_MLCNANDFLASH : MTD_NANDFLASH;
|
||||
mtd->flags = MTD_CAP_NANDFLASH;
|
||||
mtd->erase = onenand_erase;
|
||||
mtd->point = NULL;
|
||||
mtd->unpoint = NULL;
|
||||
mtd->read = onenand_read;
|
||||
mtd->write = onenand_write;
|
||||
mtd->read_oob = onenand_read_oob;
|
||||
mtd->write_oob = onenand_write_oob;
|
||||
mtd->panic_write = onenand_panic_write;
|
||||
mtd->_erase = onenand_erase;
|
||||
mtd->_point = NULL;
|
||||
mtd->_unpoint = NULL;
|
||||
mtd->_read = onenand_read;
|
||||
mtd->_write = onenand_write;
|
||||
mtd->_read_oob = onenand_read_oob;
|
||||
mtd->_write_oob = onenand_write_oob;
|
||||
mtd->_panic_write = onenand_panic_write;
|
||||
#ifdef CONFIG_MTD_ONENAND_OTP
|
||||
mtd->get_fact_prot_info = onenand_get_fact_prot_info;
|
||||
mtd->read_fact_prot_reg = onenand_read_fact_prot_reg;
|
||||
mtd->get_user_prot_info = onenand_get_user_prot_info;
|
||||
mtd->read_user_prot_reg = onenand_read_user_prot_reg;
|
||||
mtd->write_user_prot_reg = onenand_write_user_prot_reg;
|
||||
mtd->lock_user_prot_reg = onenand_lock_user_prot_reg;
|
||||
mtd->_get_fact_prot_info = onenand_get_fact_prot_info;
|
||||
mtd->_read_fact_prot_reg = onenand_read_fact_prot_reg;
|
||||
mtd->_get_user_prot_info = onenand_get_user_prot_info;
|
||||
mtd->_read_user_prot_reg = onenand_read_user_prot_reg;
|
||||
mtd->_write_user_prot_reg = onenand_write_user_prot_reg;
|
||||
mtd->_lock_user_prot_reg = onenand_lock_user_prot_reg;
|
||||
#endif
|
||||
mtd->sync = onenand_sync;
|
||||
mtd->lock = onenand_lock;
|
||||
mtd->unlock = onenand_unlock;
|
||||
mtd->suspend = onenand_suspend;
|
||||
mtd->resume = onenand_resume;
|
||||
mtd->block_isbad = onenand_block_isbad;
|
||||
mtd->block_markbad = onenand_block_markbad;
|
||||
mtd->_sync = onenand_sync;
|
||||
mtd->_lock = onenand_lock;
|
||||
mtd->_unlock = onenand_unlock;
|
||||
mtd->_suspend = onenand_suspend;
|
||||
mtd->_resume = onenand_resume;
|
||||
mtd->_block_isbad = onenand_block_isbad;
|
||||
mtd->_block_markbad = onenand_block_markbad;
|
||||
mtd->owner = THIS_MODULE;
|
||||
mtd->writebufsize = mtd->writesize;
|
||||
|
||||
|
@@ -923,7 +923,7 @@ static int s3c_onenand_probe(struct platform_device *pdev)
|
||||
r = platform_get_resource(pdev, IORESOURCE_MEM, 1);
|
||||
if (!r) {
|
||||
dev_err(&pdev->dev, "no buffer memory resource defined\n");
|
||||
return -ENOENT;
|
||||
err = -ENOENT;
|
||||
goto ahb_resource_failed;
|
||||
}
|
||||
|
||||
@@ -964,7 +964,7 @@ static int s3c_onenand_probe(struct platform_device *pdev)
|
||||
r = platform_get_resource(pdev, IORESOURCE_MEM, 1);
|
||||
if (!r) {
|
||||
dev_err(&pdev->dev, "no dma memory resource defined\n");
|
||||
return -ENOENT;
|
||||
err = -ENOENT;
|
||||
goto dma_resource_failed;
|
||||
}
|
||||
|
||||
@@ -1014,7 +1014,7 @@ static int s3c_onenand_probe(struct platform_device *pdev)
|
||||
if (s3c_read_reg(MEM_CFG_OFFSET) & ONENAND_SYS_CFG1_SYNC_READ)
|
||||
dev_info(&onenand->pdev->dev, "OneNAND Sync. Burst Read enabled\n");
|
||||
|
||||
err = mtd_device_parse_register(mtd, NULL, 0,
|
||||
err = mtd_device_parse_register(mtd, NULL, NULL,
|
||||
pdata ? pdata->parts : NULL,
|
||||
pdata ? pdata->nr_parts : 0);
|
||||
|
||||
|
Reference in New Issue
Block a user