aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mtd
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/mtd')
-rw-r--r--drivers/mtd/mtdpart.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/drivers/mtd/mtdpart.c b/drivers/mtd/mtdpart.c
index 6174a97d7902..c66902df3171 100644
--- a/drivers/mtd/mtdpart.c
+++ b/drivers/mtd/mtdpart.c
@@ -151,6 +151,20 @@ static int part_write (struct mtd_info *mtd, loff_t to, size_t len,
151 len, retlen, buf); 151 len, retlen, buf);
152} 152}
153 153
154static int part_panic_write (struct mtd_info *mtd, loff_t to, size_t len,
155 size_t *retlen, const u_char *buf)
156{
157 struct mtd_part *part = PART(mtd);
158 if (!(mtd->flags & MTD_WRITEABLE))
159 return -EROFS;
160 if (to >= mtd->size)
161 len = 0;
162 else if (to + len > mtd->size)
163 len = mtd->size - to;
164 return part->master->panic_write (part->master, to + part->offset,
165 len, retlen, buf);
166}
167
154static int part_write_oob(struct mtd_info *mtd, loff_t to, 168static int part_write_oob(struct mtd_info *mtd, loff_t to,
155 struct mtd_oob_ops *ops) 169 struct mtd_oob_ops *ops)
156{ 170{
@@ -352,6 +366,9 @@ int add_mtd_partitions(struct mtd_info *master,
352 slave->mtd.read = part_read; 366 slave->mtd.read = part_read;
353 slave->mtd.write = part_write; 367 slave->mtd.write = part_write;
354 368
369 if (master->panic_write)
370 slave->mtd.panic_write = part_panic_write;
371
355 if(master->point && master->unpoint){ 372 if(master->point && master->unpoint){
356 slave->mtd.point = part_point; 373 slave->mtd.point = part_point;
357 slave->mtd.unpoint = part_unpoint; 374 slave->mtd.unpoint = part_unpoint;