
Signed-off-by: Haikun Wang haikun.wang@freescale.com --- drivers/mtd/spi/sf_dataflash.c | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-)
diff --git a/drivers/mtd/spi/sf_dataflash.c b/drivers/mtd/spi/sf_dataflash.c index 6bf628b..648f3ca 100644 --- a/drivers/mtd/spi/sf_dataflash.c +++ b/drivers/mtd/spi/sf_dataflash.c @@ -512,7 +512,8 @@ static struct flash_info dataflash_data[] = { { "at45db642d", 0x1f2800, 8192, 1024, 10, SUP_POW2PS | IS_POW2PS}, };
-static struct flash_info *jedec_probe(struct spi_slave *spi, u8 *id) +static int jedec_probe(struct spi_slave *spi, u8 *id, + struct flash_info **pp_info) { int tmp; uint32_t jedec; @@ -529,7 +530,7 @@ static struct flash_info *jedec_probe(struct spi_slave *spi, u8 *id) * only Atmel sells these chips. */ if (id[0] != 0x1f) - return NULL; + return -EINVAL;
jedec = id[0]; jedec = jedec << 8; @@ -546,17 +547,22 @@ static struct flash_info *jedec_probe(struct spi_slave *spi, u8 *id) if (status < 0) { debug("SPI DataFlash: status error %d\n", status); - return NULL; + return -EIO; } if (status & 0x1) { - if (info->flags & IS_POW2PS) - return info; + if (info->flags & IS_POW2PS) { + *pp_info = info; + return 0; + } } else { - if (!(info->flags & IS_POW2PS)) - return info; + if (!(info->flags & IS_POW2PS)) { + *pp_info = info; + return 0; + } } } else { - return info; + *pp_info = info; + return 0; } } } @@ -569,7 +575,7 @@ static struct flash_info *jedec_probe(struct spi_slave *spi, u8 *id) printf("SPI DataFlash: Unsupported flash IDs: "); printf("manuf %02x, jedec %04x, ext_jedec %04x\n", id[0], jedec, id[3] << 8 | id[4]); - return NULL; + return -EPROTONOSUPPORT; }
/* @@ -614,8 +620,8 @@ static int spi_dataflash_probe(struct udevice *dev) * Both support the security register, though with different * write procedures. */ - info = jedec_probe(spi, idcode); - if (info != NULL) + ret = jedec_probe(spi, idcode, &info); + if (!ret) add_dataflash(dev, info->name, info->nr_pages, info->pagesize, info->pageoffset, (info->flags & SUP_POW2PS) ? 'd' : 'c');