summaryrefslogtreecommitdiffstats
path: root/drivers/mtd/partition.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/mtd/partition.c')
-rw-r--r--drivers/mtd/partition.c58
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);