aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mtd/devices/m25p80.c
diff options
context:
space:
mode:
authorAnton Vorontsov <avorontsov@mvista.com>2010-06-22 12:57:34 -0400
committerDavid Woodhouse <David.Woodhouse@intel.com>2010-08-04 05:57:47 -0400
commitf7b000904a848b64c36e3b4d0715744aaf345767 (patch)
tree2c22f8791522d8b4039731670c97371aa17a464a /drivers/mtd/devices/m25p80.c
parentdd02b67d5e9e7896891fa27eb5db65f55a290998 (diff)
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@gmail.com> Signed-off-by: Anton Vorontsov <avorontsov@mvista.com> Acked-by: Mike Frysinger <vapier@gentoo.org> Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com> Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
Diffstat (limited to 'drivers/mtd/devices/m25p80.c')
-rw-r--r--drivers/mtd/devices/m25p80.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/drivers/mtd/devices/m25p80.c b/drivers/mtd/devices/m25p80.c
index 372df59f79e2..ff7627a3d075 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[] = {
681 { "m25p64", INFO(0x202017, 0, 64 * 1024, 128, 0) }, 681 { "m25p64", INFO(0x202017, 0, 64 * 1024, 128, 0) },
682 { "m25p128", INFO(0x202018, 0, 256 * 1024, 64, 0) }, 682 { "m25p128", INFO(0x202018, 0, 256 * 1024, 64, 0) },
683 683
684 { "m25p05-nonjedec", INFO(0, 0, 32 * 1024, 2, 0) },
685 { "m25p10-nonjedec", INFO(0, 0, 32 * 1024, 4, 0) },
686 { "m25p20-nonjedec", INFO(0, 0, 64 * 1024, 4, 0) },
687 { "m25p40-nonjedec", INFO(0, 0, 64 * 1024, 8, 0) },
688 { "m25p80-nonjedec", INFO(0, 0, 64 * 1024, 16, 0) },
689 { "m25p16-nonjedec", INFO(0, 0, 64 * 1024, 32, 0) },
690 { "m25p32-nonjedec", INFO(0, 0, 64 * 1024, 64, 0) },
691 { "m25p64-nonjedec", INFO(0, 0, 64 * 1024, 128, 0) },
692 { "m25p128-nonjedec", INFO(0, 0, 256 * 1024, 64, 0) },
693
684 { "m45pe10", INFO(0x204011, 0, 64 * 1024, 2, 0) }, 694 { "m45pe10", INFO(0x204011, 0, 64 * 1024, 2, 0) },
685 { "m45pe80", INFO(0x204014, 0, 64 * 1024, 16, 0) }, 695 { "m45pe80", INFO(0x204014, 0, 64 * 1024, 16, 0) },
686 { "m45pe16", INFO(0x204015, 0, 64 * 1024, 32, 0) }, 696 { "m45pe16", INFO(0x204015, 0, 64 * 1024, 32, 0) },
@@ -796,8 +806,7 @@ static int __devinit m25p_probe(struct spi_device *spi)
796 806
797 jid = jedec_probe(spi); 807 jid = jedec_probe(spi);
798 if (!jid) { 808 if (!jid) {
799 dev_info(&spi->dev, "non-JEDEC variant of %s\n", 809 return -ENODEV;
800 id->name);
801 } else if (jid != id) { 810 } else if (jid != id) {
802 /* 811 /*
803 * JEDEC knows better, so overwrite platform ID. We 812 * JEDEC knows better, so overwrite platform ID. We