diff options
author | Brian Norris <computersforpeace@gmail.com> | 2012-07-13 12:28:24 -0400 |
---|---|---|
committer | David Woodhouse <David.Woodhouse@intel.com> | 2012-09-29 09:54:09 -0400 |
commit | bf7a01bf7987b63b121d572b240c132ec44129c4 (patch) | |
tree | 155310ffd192045d4016422911900806def71d22 /drivers/mtd/nand/nand_base.c | |
parent | 28446acb1f8268cda4b2076f72519534f84d6a36 (diff) |
mtd: nand: allow NAND_NO_SUBPAGE_WRITE to be set from driver
The NAND_CHIPOPTIONS_MSK has limited utility and is causing real bugs. It
silently masks off at least one flag that might be set by the driver
(NAND_NO_SUBPAGE_WRITE). This breaks the GPMI NAND driver and possibly
others.
Really, as long as driver writers exercise a small amount of care with
NAND_* options, this mask is not necessary at all; it was only here to
prevent certain options from accidentally being set by the driver. But the
original thought turns out to be a bad idea occasionally. Thus, kill it.
Note, this patch fixes some major gpmi-nand breakage.
Signed-off-by: Brian Norris <computersforpeace@gmail.com>
Tested-by: Huang Shijie <shijie8@gmail.com>
Cc: stable@vger.kernel.org
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
Diffstat (limited to 'drivers/mtd/nand/nand_base.c')
-rw-r--r-- | drivers/mtd/nand/nand_base.c | 7 |
1 files changed, 2 insertions, 5 deletions
diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c index ead301a455ee..996cc4836885 100644 --- a/drivers/mtd/nand/nand_base.c +++ b/drivers/mtd/nand/nand_base.c | |||
@@ -2909,8 +2909,6 @@ static int nand_flash_detect_onfi(struct mtd_info *mtd, struct nand_chip *chip, | |||
2909 | if (le16_to_cpu(p->features) & 1) | 2909 | if (le16_to_cpu(p->features) & 1) |
2910 | *busw = NAND_BUSWIDTH_16; | 2910 | *busw = NAND_BUSWIDTH_16; |
2911 | 2911 | ||
2912 | chip->options &= ~NAND_CHIPOPTIONS_MSK; | ||
2913 | |||
2914 | pr_info("ONFI flash detected\n"); | 2912 | pr_info("ONFI flash detected\n"); |
2915 | return 1; | 2913 | return 1; |
2916 | } | 2914 | } |
@@ -3074,9 +3072,8 @@ static struct nand_flash_dev *nand_get_flash_type(struct mtd_info *mtd, | |||
3074 | mtd->erasesize <<= ((id_data[3] & 0x03) << 1); | 3072 | mtd->erasesize <<= ((id_data[3] & 0x03) << 1); |
3075 | } | 3073 | } |
3076 | } | 3074 | } |
3077 | /* Get chip options, preserve non chip based options */ | 3075 | /* Get chip options */ |
3078 | chip->options &= ~NAND_CHIPOPTIONS_MSK; | 3076 | chip->options |= type->options; |
3079 | chip->options |= type->options & NAND_CHIPOPTIONS_MSK; | ||
3080 | 3077 | ||
3081 | /* | 3078 | /* |
3082 | * Check if chip is not a Samsung device. Do not clear the | 3079 | * Check if chip is not a Samsung device. Do not clear the |