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: 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>
This commit is contained in:
parent
f7b000904a
commit
9d2c4f3fe5
@ -16,6 +16,8 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
|
#include <linux/err.h>
|
||||||
|
#include <linux/errno.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/device.h>
|
#include <linux/device.h>
|
||||||
#include <linux/interrupt.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) {
|
if (tmp < 0) {
|
||||||
DEBUG(MTD_DEBUG_LEVEL0, "%s: error %d reading JEDEC ID\n",
|
DEBUG(MTD_DEBUG_LEVEL0, "%s: error %d reading JEDEC ID\n",
|
||||||
dev_name(&spi->dev), tmp);
|
dev_name(&spi->dev), tmp);
|
||||||
return NULL;
|
return ERR_PTR(tmp);
|
||||||
}
|
}
|
||||||
jedec = id[0];
|
jedec = id[0];
|
||||||
jedec = jedec << 8;
|
jedec = jedec << 8;
|
||||||
@ -742,14 +744,6 @@ static const struct spi_device_id *__devinit jedec_probe(struct spi_device *spi)
|
|||||||
jedec = jedec << 8;
|
jedec = jedec << 8;
|
||||||
jedec |= id[2];
|
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];
|
ext_jedec = id[3] << 8 | id[4];
|
||||||
|
|
||||||
for (tmp = 0; tmp < ARRAY_SIZE(m25p_ids) - 1; tmp++) {
|
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 &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;
|
const struct spi_device_id *jid;
|
||||||
|
|
||||||
jid = jedec_probe(spi);
|
jid = jedec_probe(spi);
|
||||||
if (!jid) {
|
if (IS_ERR(jid)) {
|
||||||
return -ENODEV;
|
return PTR_ERR(jid);
|
||||||
} else if (jid != id) {
|
} else if (jid != id) {
|
||||||
/*
|
/*
|
||||||
* JEDEC knows better, so overwrite platform ID. We
|
* JEDEC knows better, so overwrite platform ID. We
|
||||||
|
Loading…
Reference in New Issue
Block a user