diff options
Diffstat (limited to 'drivers/mtd/mtdpart.c')
-rw-r--r-- | drivers/mtd/mtdpart.c | 17 |
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 | ||
154 | static 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 | |||
154 | static int part_write_oob(struct mtd_info *mtd, loff_t to, | 168 | static 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; |