From 5537bb19315cbcb460258ba6a1f4787a81f5d4e1 Mon Sep 17 00:00:00 2001 From: Maxim Levitsky Date: Mon, 22 Feb 2010 20:39:40 +0200 Subject: [PATCH] --- yaml --- r: 195899 b: refs/heads/master c: 93edbad69b0491d794c2ec86bcc65c69eac676e3 h: refs/heads/master i: 195897: 673d59c9fb686347454e13fcaf1727365411297b 195895: c50369fe9fcdbe425f4001ae3a7813307be06a79 v: v3 --- [refs] | 2 +- trunk/drivers/mtd/nand/nand_base.c | 8 +++++++- trunk/include/linux/mtd/nand.h | 6 ++++++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index 525a70785b46..519af7f593e8 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 5e81e88a4c140586d9212999cea683bcd66a15c6 +refs/heads/master: 93edbad69b0491d794c2ec86bcc65c69eac676e3 diff --git a/trunk/drivers/mtd/nand/nand_base.c b/trunk/drivers/mtd/nand/nand_base.c index 1c4823696be2..b9dc65c7253c 100644 --- a/trunk/drivers/mtd/nand/nand_base.c +++ b/trunk/drivers/mtd/nand/nand_base.c @@ -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; diff --git a/trunk/include/linux/mtd/nand.h b/trunk/include/linux/mtd/nand.h index d152bdf9161f..8bdacb885f90 100644 --- a/trunk/include/linux/mtd/nand.h +++ b/trunk/include/linux/mtd/nand.h @@ -182,6 +182,12 @@ typedef enum { /* Chip does not allow subpage writes */ #define NAND_NO_SUBPAGE_WRITE 0x00000200 +/* Device is one of 'new' xD cards that expose fake nand command set */ +#define NAND_BROKEN_XD 0x00000400 + +/* Device behaves just like nand, but is readonly */ +#define NAND_ROM 0x00000800 + /* Options valid for Samsung large page devices */ #define NAND_SAMSUNG_LP_OPTIONS \ (NAND_NO_PADDING | NAND_CACHEPRG | NAND_COPYBACK)