diff options
Diffstat (limited to 'drivers/mtd/nand/nand_base.c')
-rw-r--r-- | drivers/mtd/nand/nand_base.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c index 1c4823696be2..b9dc65c7253c 100644 --- a/drivers/mtd/nand/nand_base.c +++ b/drivers/mtd/nand/nand_base.c | |||
@@ -434,6 +434,11 @@ static int nand_default_block_markbad(struct mtd_info *mtd, loff_t ofs) | |||
434 | static int nand_check_wp(struct mtd_info *mtd) | 434 | static int nand_check_wp(struct mtd_info *mtd) |
435 | { | 435 | { |
436 | struct nand_chip *chip = mtd->priv; | 436 | struct nand_chip *chip = mtd->priv; |
437 | |||
438 | /* broken xD cards report WP despite being writable */ | ||
439 | if (chip->options & NAND_BROKEN_XD) | ||
440 | return 0; | ||
441 | |||
437 | /* Check the WP bit */ | 442 | /* Check the WP bit */ |
438 | chip->cmdfunc(mtd, NAND_CMD_STATUS, -1, -1); | 443 | chip->cmdfunc(mtd, NAND_CMD_STATUS, -1, -1); |
439 | return (chip->read_byte(mtd) & NAND_STATUS_WP) ? 0 : 1; | 444 | return (chip->read_byte(mtd) & NAND_STATUS_WP) ? 0 : 1; |
@@ -3175,7 +3180,8 @@ int nand_scan_tail(struct mtd_info *mtd) | |||
3175 | 3180 | ||
3176 | /* Fill in remaining MTD driver data */ | 3181 | /* Fill in remaining MTD driver data */ |
3177 | mtd->type = MTD_NANDFLASH; | 3182 | mtd->type = MTD_NANDFLASH; |
3178 | mtd->flags = MTD_CAP_NANDFLASH; | 3183 | mtd->flags = (chip->options & NAND_ROM) ? MTD_CAP_ROM : |
3184 | MTD_CAP_NANDFLASH; | ||
3179 | mtd->erase = nand_erase; | 3185 | mtd->erase = nand_erase; |
3180 | mtd->point = NULL; | 3186 | mtd->point = NULL; |
3181 | mtd->unpoint = NULL; | 3187 | mtd->unpoint = NULL; |