diff options
Diffstat (limited to 'drivers/mtd/partition.c')
-rw-r--r-- | drivers/mtd/partition.c | 58 |
1 files changed, 30 insertions, 28 deletions
diff --git a/drivers/mtd/partition.c b/drivers/mtd/partition.c index 013697732d..a426c8bfcf 100644 --- a/drivers/mtd/partition.c +++ b/drivers/mtd/partition.c @@ -13,7 +13,7 @@ static int mtd_part_read(struct mtd_info *mtd, loff_t from, size_t len, len = 0; else if (from + len > mtd->size) len = mtd->size - from; - res = mtd->master->read(mtd->master, from + mtd->master_offset, + res = mtd->parent->_read(mtd->parent, from + mtd->master_offset, len, retlen, buf); return res; } @@ -28,7 +28,7 @@ static int mtd_part_read_oob(struct mtd_info *mtd, loff_t from, if (ops->datbuf && from + ops->len > mtd->size) return -EINVAL; - res = mtd->master->read_oob(mtd->master, from + mtd->master_offset, ops); + res = mtd->parent->_read_oob(mtd->parent, from + mtd->master_offset, ops); if (unlikely(res)) { if (mtd_is_bitflip(res)) mtd->ecc_stats.corrected++; @@ -47,7 +47,7 @@ static int mtd_part_write(struct mtd_info *mtd, loff_t to, size_t len, len = 0; else if (to + len > mtd->size) len = mtd->size - to; - return mtd->master->write(mtd->master, to + mtd->master_offset, + return mtd->parent->_write(mtd->parent, to + mtd->master_offset, len, retlen, buf); } @@ -58,7 +58,7 @@ static int mtd_part_write_oob(struct mtd_info *mtd, loff_t to, return -EINVAL; if (ops->datbuf && to + ops->len > mtd->size) return -EINVAL; - return mtd->master->write_oob(mtd->master, to + mtd->master_offset, ops); + return mtd->parent->_write_oob(mtd->parent, to + mtd->master_offset, ops); } static int mtd_part_erase(struct mtd_info *mtd, struct erase_info *instr) @@ -70,7 +70,7 @@ static int mtd_part_erase(struct mtd_info *mtd, struct erase_info *instr) if (instr->addr >= mtd->size) return -EINVAL; instr->addr += mtd->master_offset; - ret = mtd->master->erase(mtd->master, instr); + ret = mtd->parent->_erase(mtd->parent, instr); if (ret) { if (instr->fail_addr != 0xffffffff) instr->fail_addr -= mtd->master_offset; @@ -81,7 +81,7 @@ static int mtd_part_erase(struct mtd_info *mtd, struct erase_info *instr) static int mtd_part_lock(struct mtd_info *mtd, loff_t offset, size_t len) { - if (!mtd->master->lock) + if (!mtd->parent->_lock) return -ENOSYS; if (!(mtd->flags & MTD_WRITEABLE)) @@ -92,12 +92,12 @@ static int mtd_part_lock(struct mtd_info *mtd, loff_t offset, size_t len) offset += mtd->master_offset; - return mtd->master->lock(mtd->master, offset, len); + return mtd->parent->_lock(mtd->parent, offset, len); } static int mtd_part_unlock(struct mtd_info *mtd, loff_t offset, size_t len) { - if (!mtd->master->unlock) + if (!mtd->parent->_unlock) return -ENOSYS; if (!(mtd->flags & MTD_WRITEABLE)) @@ -108,7 +108,7 @@ static int mtd_part_unlock(struct mtd_info *mtd, loff_t offset, size_t len) offset += mtd->master_offset; - return mtd->master->unlock(mtd->master, offset, len); + return mtd->parent->_unlock(mtd->parent, offset, len); } static int mtd_part_block_isbad(struct mtd_info *mtd, loff_t ofs) @@ -116,7 +116,7 @@ static int mtd_part_block_isbad(struct mtd_info *mtd, loff_t ofs) if (ofs >= mtd->size) return -EINVAL; ofs += mtd->master_offset; - return mtd_block_isbad(mtd->master, ofs); + return mtd_block_isbad(mtd->parent, ofs); } static int mtd_part_block_markbad(struct mtd_info *mtd, loff_t ofs) @@ -128,7 +128,7 @@ static int mtd_part_block_markbad(struct mtd_info *mtd, loff_t ofs) if (ofs >= mtd->size) return -EINVAL; ofs += mtd->master_offset; - res = mtd->master->block_markbad(mtd->master, ofs); + res = mtd->parent->_block_markbad(mtd->parent, ofs); if (!res) mtd->ecc_stats.badblocks++; return res; @@ -143,7 +143,7 @@ static int mtd_part_block_markgood(struct mtd_info *mtd, loff_t ofs) if (ofs >= mtd->size) return -EINVAL; ofs += mtd->master_offset; - res = mtd->master->block_markgood(mtd->master, ofs); + res = mtd->parent->_block_markgood(mtd->parent, ofs); if (!res) mtd->ecc_stats.badblocks--; return res; @@ -159,13 +159,15 @@ struct mtd_info *mtd_add_partition(struct mtd_info *mtd, off_t offset, part->type = mtd->type; part->flags = mtd->flags; - part->parent = &mtd->class_dev; + part->dev.parent = &mtd->dev; part->writesize = mtd->writesize; part->writebufsize = mtd->writebufsize; part->oobsize = mtd->oobsize; part->oobavail = mtd->oobavail; part->bitflip_threshold = mtd->bitflip_threshold; part->ecclayout = mtd->ecclayout; + part->ecc_step_size = mtd->ecc_step_size; + part->ooblayout = mtd->ooblayout; part->ecc_strength = mtd->ecc_strength; part->subpage_sft = mtd->subpage_sft; part->cdev.flags = flags; @@ -196,27 +198,27 @@ struct mtd_info *mtd_add_partition(struct mtd_info *mtd, off_t offset, part->erasesize = mtd->erasesize; } - part->read = mtd_part_read; + part->_read = mtd_part_read; if (IS_ENABLED(CONFIG_MTD_WRITE)) { - part->write = mtd_part_write; - part->erase = mtd_part_erase; - part->lock = mtd_part_lock; - part->unlock = mtd_part_unlock; - part->block_markbad = mtd->block_markbad ? mtd_part_block_markbad : NULL; - part->block_markgood = mtd->block_markgood ? mtd_part_block_markgood : NULL; + part->_write = mtd_part_write; + part->_erase = mtd_part_erase; + part->_lock = mtd_part_lock; + part->_unlock = mtd_part_unlock; + part->_block_markbad = mtd->_block_markbad ? mtd_part_block_markbad : NULL; + part->_block_markgood = mtd->_block_markgood ? mtd_part_block_markgood : NULL; } - if (mtd->write_oob) - part->write_oob = mtd_part_write_oob; - if (mtd->read_oob) - part->read_oob = mtd_part_read_oob; + if (mtd->_write_oob) + part->_write_oob = mtd_part_write_oob; + if (mtd->_read_oob) + part->_read_oob = mtd_part_read_oob; - part->block_isbad = mtd->block_isbad ? mtd_part_block_isbad : NULL; + part->_block_isbad = mtd->_block_isbad ? mtd_part_block_isbad : NULL; part->size = size; part->name = xstrdup(name); part->master_offset = offset; - part->master = mtd; + part->parent = mtd; if (!strncmp(mtd->cdev.name, name, strlen(mtd->cdev.name))) part->cdev.partname = xstrdup(name + strlen(mtd->cdev.name) + 1); @@ -225,7 +227,7 @@ struct mtd_info *mtd_add_partition(struct mtd_info *mtd, off_t offset, if (ret) goto err; - part->cdev.master = &part->master->cdev; + part->cdev.master = &part->parent->cdev; return part; err: @@ -238,7 +240,7 @@ err: int mtd_del_partition(struct mtd_info *part) { - if (!part->master) + if (!part->parent) return -EINVAL; del_mtd_device(part); |