Commit 9d2c4f3f authored by Anton Vorontsov's avatar Anton Vorontsov Committed by David Woodhouse
Browse files

mtd: m25p80: Make jedec_probe() return proper errno values



spi_write_then_read() may return its own return codes (e.g. -EIO),
so let's propagate the value down to the probe().

Also, remove jedec == 0 check, it isn't needed as nowadays we use
dedicated SPI device IDs for non-JEDEC flashes.

Suggested-by: default avatarBarry Song <21cnbao@gmail.com>
Signed-off-by: default avatarAnton Vorontsov <avorontsov@mvista.com>
Acked-by: default avatarMike Frysinger <vapier@gentoo.org>
Signed-off-by: default avatarArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
Signed-off-by: default avatarDavid Woodhouse <David.Woodhouse@intel.com>
parent f7b00090
Loading
Loading
Loading
Loading
+6 −12
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@
 */

#include <linux/init.h>
#include <linux/err.h>
#include <linux/errno.h>
#include <linux/module.h>
#include <linux/device.h>
#include <linux/interrupt.h>
@@ -734,7 +736,7 @@ static const struct spi_device_id *__devinit jedec_probe(struct spi_device *spi)
	if (tmp < 0) {
		DEBUG(MTD_DEBUG_LEVEL0, "%s: error %d reading JEDEC ID\n",
			dev_name(&spi->dev), tmp);
		return NULL;
		return ERR_PTR(tmp);
	}
	jedec = id[0];
	jedec = jedec << 8;
@@ -742,14 +744,6 @@ static const struct spi_device_id *__devinit jedec_probe(struct spi_device *spi)
	jedec = jedec << 8;
	jedec |= id[2];

	/*
	 * Some chips (like Numonyx M25P80) have JEDEC and non-JEDEC variants,
	 * which depend on technology process. Officially RDID command doesn't
	 * exist for non-JEDEC chips, but for compatibility they return ID 0.
	 */
	if (jedec == 0)
		return NULL;

	ext_jedec = id[3] << 8 | id[4];

	for (tmp = 0; tmp < ARRAY_SIZE(m25p_ids) - 1; tmp++) {
@@ -760,7 +754,7 @@ static const struct spi_device_id *__devinit jedec_probe(struct spi_device *spi)
			return &m25p_ids[tmp];
		}
	}
	return NULL;
	return ERR_PTR(-ENODEV);
}


@@ -805,8 +799,8 @@ static int __devinit m25p_probe(struct spi_device *spi)
		const struct spi_device_id *jid;

		jid = jedec_probe(spi);
		if (!jid) {
			return -ENODEV;
		if (IS_ERR(jid)) {
			return PTR_ERR(jid);
		} else if (jid != id) {
			/*
			 * JEDEC knows better, so overwrite platform ID. We