mtd: m25p80: Fix false-positive probing

Linux-MTD Mailing List linux-mtd at lists.infradead.org
Wed Aug 4 06:59:08 EDT 2010


Gitweb:     http://git.infradead.org/?p=mtd-2.6.git;a=commit;h=f7b000904a848b64c36e3b4d0715744aaf345767
Commit:     f7b000904a848b64c36e3b4d0715744aaf345767
Parent:     dd02b67d5e9e7896891fa27eb5db65f55a290998
Author:     Anton Vorontsov <avorontsov at mvista.com>
AuthorDate: Tue Jun 22 20:57:34 2010 +0400
Committer:  David Woodhouse <David.Woodhouse at intel.com>
CommitDate: Wed Aug 4 10:57:47 2010 +0100

    mtd: m25p80: Fix false-positive probing
    
    Since commit 18c6182bae0acca220ed6611f741034d563cd19f ("Rework
    probing/JEDEC code"), m25p80 driver successfully registers chips
    even if JEDEC probing fails.
    
    This was needed to support non-JEDEC flashes. Though, it appears
    that some platforms (e.g. blackfin bf533 stamp[1]) used the old
    behavior to detect if there's any flash connected, so the driver
    have to fail on JEDEC probing errors.
    
    This patch restores the old behavior for JEDEC flashes, and adds
    "-nonjedec" SPI device IDs for M25Pxx flashes, so that the kernel
    still supports non-JEDEC flashes.
    
    [1] http://blackfin.uclinux.org/gf/project/uclinux-dist/tracker/?action=TrackerItemEdit&tracker_item_id=5975
    
    Reported-by: Mingquan Pan
    Reported-by: Barry Song <21cnbao at gmail.com>
    Signed-off-by: Anton Vorontsov <avorontsov at mvista.com>
    Acked-by: Mike Frysinger <vapier at gentoo.org>
    Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy at nokia.com>
    Signed-off-by: David Woodhouse <David.Woodhouse at intel.com>
---
 drivers/mtd/devices/m25p80.c |   13 +++++++++++--
 1 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/drivers/mtd/devices/m25p80.c b/drivers/mtd/devices/m25p80.c
index 372df59..ff7627a 100644
--- a/drivers/mtd/devices/m25p80.c
+++ b/drivers/mtd/devices/m25p80.c
@@ -681,6 +681,16 @@ static const struct spi_device_id m25p_ids[] = {
 	{ "m25p64",  INFO(0x202017,  0,  64 * 1024, 128, 0) },
 	{ "m25p128", INFO(0x202018,  0, 256 * 1024,  64, 0) },
 
+	{ "m25p05-nonjedec",  INFO(0, 0,  32 * 1024,   2, 0) },
+	{ "m25p10-nonjedec",  INFO(0, 0,  32 * 1024,   4, 0) },
+	{ "m25p20-nonjedec",  INFO(0, 0,  64 * 1024,   4, 0) },
+	{ "m25p40-nonjedec",  INFO(0, 0,  64 * 1024,   8, 0) },
+	{ "m25p80-nonjedec",  INFO(0, 0,  64 * 1024,  16, 0) },
+	{ "m25p16-nonjedec",  INFO(0, 0,  64 * 1024,  32, 0) },
+	{ "m25p32-nonjedec",  INFO(0, 0,  64 * 1024,  64, 0) },
+	{ "m25p64-nonjedec",  INFO(0, 0,  64 * 1024, 128, 0) },
+	{ "m25p128-nonjedec", INFO(0, 0, 256 * 1024,  64, 0) },
+
 	{ "m45pe10", INFO(0x204011,  0, 64 * 1024,    2, 0) },
 	{ "m45pe80", INFO(0x204014,  0, 64 * 1024,   16, 0) },
 	{ "m45pe16", INFO(0x204015,  0, 64 * 1024,   32, 0) },
@@ -796,8 +806,7 @@ static int __devinit m25p_probe(struct spi_device *spi)
 
 		jid = jedec_probe(spi);
 		if (!jid) {
-			dev_info(&spi->dev, "non-JEDEC variant of %s\n",
-				 id->name);
+			return -ENODEV;
 		} else if (jid != id) {
 			/*
 			 * JEDEC knows better, so overwrite platform ID. We



More information about the linux-mtd-cvs mailing list