diff options
author | Kyungmin Park <kyungmin.aprk@samsung.com> | 2005-02-16 04:39:39 -0500 |
---|---|---|
committer | Thomas Gleixner <tglx@mtd.linutronix.de> | 2005-05-23 06:36:30 -0400 |
commit | 0ea4a7558f3c5b894e46da4b2be120edf002a86d (patch) | |
tree | 494c30b92e8170437e50cb26bba28da2d9add209 /drivers/mtd/nand | |
parent | 88ec7c50bfeb5447d96fba55021bec2a274ea021 (diff) |
[MTD] NAND: Early Manufacturer ID lookup
Move manufacturer ID search to display correct ID in case of buswidth
mismatch.
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'drivers/mtd/nand')
-rw-r--r-- | drivers/mtd/nand/nand_base.c | 19 | ||||
-rw-r--r-- | drivers/mtd/nand/nand_ids.c | 4 |
2 files changed, 11 insertions, 12 deletions
diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c index 1806ffae2452..acd5ec193ff1 100644 --- a/drivers/mtd/nand/nand_base.c +++ b/drivers/mtd/nand/nand_base.c | |||
@@ -59,7 +59,7 @@ | |||
59 | * The AG-AND chips have nice features for speed improvement, | 59 | * The AG-AND chips have nice features for speed improvement, |
60 | * which are not supported yet. Read / program 4 pages in one go. | 60 | * which are not supported yet. Read / program 4 pages in one go. |
61 | * | 61 | * |
62 | * $Id: nand_base.c,v 1.132 2005/02/09 14:49:56 dedekind Exp $ | 62 | * $Id: nand_base.c,v 1.133 2005/02/16 09:39:35 gleixner Exp $ |
63 | * | 63 | * |
64 | * This program is free software; you can redistribute it and/or modify | 64 | * This program is free software; you can redistribute it and/or modify |
65 | * it under the terms of the GNU General Public License version 2 as | 65 | * it under the terms of the GNU General Public License version 2 as |
@@ -2276,7 +2276,7 @@ static int nand_block_markbad (struct mtd_info *mtd, loff_t ofs) | |||
2276 | */ | 2276 | */ |
2277 | int nand_scan (struct mtd_info *mtd, int maxchips) | 2277 | int nand_scan (struct mtd_info *mtd, int maxchips) |
2278 | { | 2278 | { |
2279 | int i, j, nand_maf_id, nand_dev_id, busw; | 2279 | int i, j, nand_maf_id, nand_dev_id, busw, maf_id; |
2280 | struct nand_chip *this = mtd->priv; | 2280 | struct nand_chip *this = mtd->priv; |
2281 | 2281 | ||
2282 | /* Get buswidth to select the correct functions*/ | 2282 | /* Get buswidth to select the correct functions*/ |
@@ -2364,12 +2364,18 @@ int nand_scan (struct mtd_info *mtd, int maxchips) | |||
2364 | busw = nand_flash_ids[i].options & NAND_BUSWIDTH_16; | 2364 | busw = nand_flash_ids[i].options & NAND_BUSWIDTH_16; |
2365 | } | 2365 | } |
2366 | 2366 | ||
2367 | /* Try to identify manufacturer */ | ||
2368 | for (maf_id = 0; nand_manuf_ids[maf_id].id != 0x0; maf_id++) { | ||
2369 | if (nand_manuf_ids[maf_id].id == nand_maf_id) | ||
2370 | break; | ||
2371 | } | ||
2372 | |||
2367 | /* Check, if buswidth is correct. Hardware drivers should set | 2373 | /* Check, if buswidth is correct. Hardware drivers should set |
2368 | * this correct ! */ | 2374 | * this correct ! */ |
2369 | if (busw != (this->options & NAND_BUSWIDTH_16)) { | 2375 | if (busw != (this->options & NAND_BUSWIDTH_16)) { |
2370 | printk (KERN_INFO "NAND device: Manufacturer ID:" | 2376 | printk (KERN_INFO "NAND device: Manufacturer ID:" |
2371 | " 0x%02x, Chip ID: 0x%02x (%s %s)\n", nand_maf_id, nand_dev_id, | 2377 | " 0x%02x, Chip ID: 0x%02x (%s %s)\n", nand_maf_id, nand_dev_id, |
2372 | nand_manuf_ids[i].name , mtd->name); | 2378 | nand_manuf_ids[maf_id].name , mtd->name); |
2373 | printk (KERN_WARNING | 2379 | printk (KERN_WARNING |
2374 | "NAND bus width %d instead %d bit\n", | 2380 | "NAND bus width %d instead %d bit\n", |
2375 | (this->options & NAND_BUSWIDTH_16) ? 16 : 8, | 2381 | (this->options & NAND_BUSWIDTH_16) ? 16 : 8, |
@@ -2408,14 +2414,9 @@ int nand_scan (struct mtd_info *mtd, int maxchips) | |||
2408 | if (mtd->oobblock > 512 && this->cmdfunc == nand_command) | 2414 | if (mtd->oobblock > 512 && this->cmdfunc == nand_command) |
2409 | this->cmdfunc = nand_command_lp; | 2415 | this->cmdfunc = nand_command_lp; |
2410 | 2416 | ||
2411 | /* Try to identify manufacturer */ | ||
2412 | for (j = 0; nand_manuf_ids[j].id != 0x0; j++) { | ||
2413 | if (nand_manuf_ids[j].id == nand_maf_id) | ||
2414 | break; | ||
2415 | } | ||
2416 | printk (KERN_INFO "NAND device: Manufacturer ID:" | 2417 | printk (KERN_INFO "NAND device: Manufacturer ID:" |
2417 | " 0x%02x, Chip ID: 0x%02x (%s %s)\n", nand_maf_id, nand_dev_id, | 2418 | " 0x%02x, Chip ID: 0x%02x (%s %s)\n", nand_maf_id, nand_dev_id, |
2418 | nand_manuf_ids[j].name , nand_flash_ids[i].name); | 2419 | nand_manuf_ids[maf_id].name , nand_flash_ids[i].name); |
2419 | break; | 2420 | break; |
2420 | } | 2421 | } |
2421 | 2422 | ||
diff --git a/drivers/mtd/nand/nand_ids.c b/drivers/mtd/nand/nand_ids.c index 9756797c92f8..79945e6ce2b9 100644 --- a/drivers/mtd/nand/nand_ids.c +++ b/drivers/mtd/nand/nand_ids.c | |||
@@ -3,7 +3,7 @@ | |||
3 | * | 3 | * |
4 | * Copyright (C) 2002 Thomas Gleixner (tglx@linutronix.de) | 4 | * Copyright (C) 2002 Thomas Gleixner (tglx@linutronix.de) |
5 | * | 5 | * |
6 | * $Id: nand_ids.c,v 1.11 2005/01/17 18:26:27 dmarlin Exp $ | 6 | * $Id: nand_ids.c,v 1.12 2005/02/16 09:33:27 gleixner Exp $ |
7 | * | 7 | * |
8 | * This program is free software; you can redistribute it and/or modify | 8 | * This program is free software; you can redistribute it and/or modify |
9 | * it under the terms of the GNU General Public License version 2 as | 9 | * it under the terms of the GNU General Public License version 2 as |
@@ -62,8 +62,6 @@ struct nand_flash_dev nand_flash_ids[] = { | |||
62 | 62 | ||
63 | {"NAND 256MiB 3,3V 8-bit", 0x71, 512, 256, 0x4000, 0}, | 63 | {"NAND 256MiB 3,3V 8-bit", 0x71, 512, 256, 0x4000, 0}, |
64 | 64 | ||
65 | {"NAND 512MiB 3,3V 8-bit", 0xDC, 512, 512, 0x4000, 0}, | ||
66 | |||
67 | /* These are the new chips with large page size. The pagesize | 65 | /* These are the new chips with large page size. The pagesize |
68 | * and the erasesize is determined from the extended id bytes | 66 | * and the erasesize is determined from the extended id bytes |
69 | */ | 67 | */ |