summaryrefslogtreecommitdiffstats
path: root/linux-2.4.x/drivers/mtd/mtdpart.c
diff options
context:
space:
mode:
Diffstat (limited to 'linux-2.4.x/drivers/mtd/mtdpart.c')
-rw-r--r--linux-2.4.x/drivers/mtd/mtdpart.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/linux-2.4.x/drivers/mtd/mtdpart.c b/linux-2.4.x/drivers/mtd/mtdpart.c
index 58142a9..2453697 100644
--- a/linux-2.4.x/drivers/mtd/mtdpart.c
+++ b/linux-2.4.x/drivers/mtd/mtdpart.c
@@ -85,6 +85,18 @@ static int part_write (struct mtd_info *mtd, loff_t to, size_t len,
len, retlen, buf);
}
+static int part_point (struct mtd_info *mtd, loff_t off, size_t len,
+ size_t *retlen, u_char **buf)
+{
+ struct mtd_part *part = PART(mtd);
+ if (off >= mtd->size)
+ len = 0;
+ else if (off + len > mtd->size)
+ len = mtd->size - off;
+ return part->master->point (part->master, off + part->offset, len,
+ retlen, buf);
+}
+
static int part_write_oob (struct mtd_info *mtd, loff_t to, size_t len,
size_t *retlen, const u_char *buf)
{
@@ -245,6 +257,10 @@ int add_mtd_partitions(struct mtd_info *master,
slave->mtd.suspend = part_suspend;
slave->mtd.resume = part_resume;
}
+
+ if (master->point)
+ slave->mtd.point = part_point;
+
if (master->writev)
slave->mtd.writev = part_writev;
if (master->readv)