aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mtd
diff options
context:
space:
mode:
authorBrian Norris <computersforpeace@gmail.com>2010-12-12 03:23:33 -0500
committerDavid Woodhouse <David.Woodhouse@intel.com>2011-01-06 10:19:20 -0500
commitb7b1a29d94c17e4341856381bccb4d17495bea60 (patch)
tree855932e331bcbb2f9c2889d879786005552a1f72 /drivers/mtd
parent0b524fb9314dc852d6a029296545ddbb17709a8b (diff)
mtd: nand: rearrange ONFI revision checking, add ONFI 2.3
In checking for the ONFI revision, the first conditional (for checking "unsupported" ONFI) seems unnecessary. All ONFI revisions should be backwards-compatible; even if this is not the case on some newer ONFI revision, it should simply fail the second version-checking if-else block (i.e., the bit-fields for 1.0, 2.0, etc. would not be set to 1). Thus, we move our "unsupported" condition after having checked each bit field. Also, it's simple enough to add a condition for ONFI revision 2.3. Note that this does *NOT* mean we handle all new features of ONFI versions above 1.0. Signed-off-by: Brian Norris <computersforpeace@gmail.com> Acked-by: Florian Fainelli <ffainelli@freebox.fr> Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
Diffstat (limited to 'drivers/mtd')
-rw-r--r--drivers/mtd/nand/nand_base.c20
1 files changed, 12 insertions, 8 deletions
diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
index c52ded31a12e..5dd7ae4e4b23 100644
--- a/drivers/mtd/nand/nand_base.c
+++ b/drivers/mtd/nand/nand_base.c
@@ -2865,20 +2865,24 @@ static int nand_flash_detect_onfi(struct mtd_info *mtd, struct nand_chip *chip,
2865 2865
2866 /* check version */ 2866 /* check version */
2867 val = le16_to_cpu(p->revision); 2867 val = le16_to_cpu(p->revision);
2868 if (val == 1 || val > (1 << 4)) { 2868 if (val & (1 << 5))
2869 printk(KERN_INFO "%s: unsupported ONFI version: %d\n", 2869 chip->onfi_version = 23;
2870 __func__, val); 2870 else if (val & (1 << 4))
2871 return 0;
2872 }
2873
2874 if (val & (1 << 4))
2875 chip->onfi_version = 22; 2871 chip->onfi_version = 22;
2876 else if (val & (1 << 3)) 2872 else if (val & (1 << 3))
2877 chip->onfi_version = 21; 2873 chip->onfi_version = 21;
2878 else if (val & (1 << 2)) 2874 else if (val & (1 << 2))
2879 chip->onfi_version = 20; 2875 chip->onfi_version = 20;
2880 else 2876 else if (val & (1 << 1))
2881 chip->onfi_version = 10; 2877 chip->onfi_version = 10;
2878 else
2879 chip->onfi_version = 0;
2880
2881 if (!chip->onfi_version) {
2882 printk(KERN_INFO "%s: unsupported ONFI version: %d\n",
2883 __func__, val);
2884 return 0;
2885 }
2882 2886
2883 sanitize_string(p->manufacturer, sizeof(p->manufacturer)); 2887 sanitize_string(p->manufacturer, sizeof(p->manufacturer));
2884 sanitize_string(p->model, sizeof(p->model)); 2888 sanitize_string(p->model, sizeof(p->model));