|
@@ -434,6 +434,11 @@ static int nand_default_block_markbad(struct mtd_info *mtd, loff_t ofs)
|
|
|
static int nand_check_wp(struct mtd_info *mtd)
|
|
|
{
|
|
|
struct nand_chip *chip = mtd->priv;
|
|
|
+
|
|
|
+ /* broken xD cards report WP despite being writable */
|
|
|
+ if (chip->options & NAND_BROKEN_XD)
|
|
|
+ return 0;
|
|
|
+
|
|
|
/* Check the WP bit */
|
|
|
chip->cmdfunc(mtd, NAND_CMD_STATUS, -1, -1);
|
|
|
return (chip->read_byte(mtd) & NAND_STATUS_WP) ? 0 : 1;
|
|
@@ -3175,7 +3180,8 @@ int nand_scan_tail(struct mtd_info *mtd)
|
|
|
|
|
|
/* Fill in remaining MTD driver data */
|
|
|
mtd->type = MTD_NANDFLASH;
|
|
|
- mtd->flags = MTD_CAP_NANDFLASH;
|
|
|
+ mtd->flags = (chip->options & NAND_ROM) ? MTD_CAP_ROM :
|
|
|
+ MTD_CAP_NANDFLASH;
|
|
|
mtd->erase = nand_erase;
|
|
|
mtd->point = NULL;
|
|
|
mtd->unpoint = NULL;
|