diff options
author | Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> | 2012-11-01 10:33:14 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2012-11-03 23:20:59 +0100 |
commit | 4104dd917388943f5b0ae87d1360738675c338b0 (patch) | |
tree | 5f168ba90f855831d3cb763091ae1a1733fc3aa0 /drivers/mtd | |
parent | 0f9c76614a7f91b92cd76dd08cfca7d77bbe7000 (diff) | |
download | barebox-4104dd917388943f5b0ae87d1360738675c338b0.tar.gz barebox-4104dd917388943f5b0ae87d1360738675c338b0.tar.xz |
mtd: introduce mtd_block_isbad
this allow to do not provide block_isbad at mtd driver level
as example spi flash
Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers/mtd')
-rw-r--r-- | drivers/mtd/core.c | 13 | ||||
-rw-r--r-- | drivers/mtd/mtdraw.c | 2 | ||||
-rw-r--r-- | drivers/mtd/partition.c | 2 | ||||
-rw-r--r-- | drivers/mtd/ubi/io.c | 2 |
4 files changed, 14 insertions, 5 deletions
diff --git a/drivers/mtd/core.c b/drivers/mtd/core.c index 94b7171189..8601787286 100644 --- a/drivers/mtd/core.c +++ b/drivers/mtd/core.c @@ -30,6 +30,15 @@ static LIST_HEAD(mtd_register_hooks); +int mtd_block_isbad(struct mtd_info *mtd, loff_t ofs) +{ + if (!mtd->block_isbad) + return 0; + if (ofs < 0 || ofs > mtd->size) + return -EINVAL; + return mtd->block_isbad(mtd, ofs); +} + static ssize_t mtd_read(struct cdev *cdev, void* buf, size_t count, loff_t _offset, ulong flags) { @@ -130,7 +139,7 @@ int mtd_ioctl(struct cdev *cdev, int request, void *buf) switch (request) { case MEMGETBADBLOCK: dev_dbg(cdev->dev, "MEMGETBADBLOCK: 0x%08llx\n", *offset); - ret = mtd->block_isbad(mtd, *offset); + ret = mtd_block_isbad(mtd, *offset); break; #ifdef CONFIG_MTD_WRITE case MEMSETBADBLOCK: @@ -189,7 +198,7 @@ static int mtd_erase(struct cdev *cdev, size_t count, loff_t offset) while (count > 0) { dev_dbg(cdev->dev, "erase %d %d\n", erase.addr, erase.len); - ret = mtd->block_isbad(mtd, erase.addr); + ret = mtd_block_isbad(mtd, erase.addr); if (ret > 0) { printf("Skipping bad block at 0x%08x\n", erase.addr); } else { diff --git a/drivers/mtd/mtdraw.c b/drivers/mtd/mtdraw.c index f541802a84..573c1d2930 100644 --- a/drivers/mtd/mtdraw.c +++ b/drivers/mtd/mtdraw.c @@ -241,7 +241,7 @@ static int mtdraw_erase(struct cdev *cdev, size_t count, loff_t _offset) while (count > 0) { debug("erase %d %d\n", erase.addr, erase.len); - ret = mtd->block_isbad(mtd, erase.addr); + ret = mtd_block_isbad(mtd, erase.addr); if (ret > 0) { printf("Skipping bad block at 0x%08x\n", erase.addr); } else { diff --git a/drivers/mtd/partition.c b/drivers/mtd/partition.c index df2eb40bf8..85f486d0ec 100644 --- a/drivers/mtd/partition.c +++ b/drivers/mtd/partition.c @@ -71,7 +71,7 @@ static int mtd_part_block_isbad(struct mtd_info *mtd, loff_t ofs) if (ofs >= mtd->size) return -EINVAL; ofs += part->offset; - return part->master->block_isbad(part->master, ofs); + return mtd_block_isbad(part->master, ofs); } static int mtd_part_block_markbad(struct mtd_info *mtd, loff_t ofs) diff --git a/drivers/mtd/ubi/io.c b/drivers/mtd/ubi/io.c index da388372c2..e3598b9d9d 100644 --- a/drivers/mtd/ubi/io.c +++ b/drivers/mtd/ubi/io.c @@ -513,7 +513,7 @@ int ubi_io_is_bad(const struct ubi_device *ubi, int pnum) if (ubi->bad_allowed) { int ret; - ret = mtd->block_isbad(mtd, (loff_t)pnum * ubi->peb_size); + ret = mtd_block_isbad(mtd, (loff_t)pnum * ubi->peb_size); if (ret < 0) ubi_err("error %d while checking if PEB %d is bad", ret, pnum); |