public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
From: Jagan Teki <jagan@openedev.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v6 19/21] sf: dataflash: Fix add_dataflash return logic
Date: Wed, 16 Nov 2016 09:33:10 +0530	[thread overview]
Message-ID: <1479268992-26811-20-git-send-email-jagan@openedev.com> (raw)
In-Reply-To: <1479268992-26811-1-git-send-email-jagan@openedev.com>

This patch fixed the add_dataflash return logic,
so-that it can handle both jedec and older chips
same as Linux.

Cc: Bin Meng <bmeng.cn@gmail.com>
Cc: York Sun <york.sun@nxp.com>
Signed-off-by: Jagan Teki <jagan@openedev.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Jagan Teki <jagan@openedev.com>
---
 drivers/mtd/spi/sf_dataflash.c | 127 ++++++++++++++++++++---------------------
 1 file changed, 61 insertions(+), 66 deletions(-)

diff --git a/drivers/mtd/spi/sf_dataflash.c b/drivers/mtd/spi/sf_dataflash.c
index 7c6c8d2..212aa69 100644
--- a/drivers/mtd/spi/sf_dataflash.c
+++ b/drivers/mtd/spi/sf_dataflash.c
@@ -586,15 +586,15 @@ static int spi_dataflash_probe(struct udevice *dev)
 	struct spi_slave *spi = dev_get_parent_priv(dev);
 	struct spi_flash *spi_flash;
 	struct flash_info *info;
-	int ret, status = 0;
+	int status;
 
 	spi_flash = dev_get_uclass_priv(dev);
 	spi_flash->spi = spi;
 	spi_flash->dev = dev;
 
-	ret = spi_claim_bus(spi);
-	if (ret)
-		return ret;
+	status = spi_claim_bus(spi);
+	if (status)
+		return status;
 
 	/*
 	 * Try to detect dataflash by JEDEC ID.
@@ -605,74 +605,69 @@ static int spi_dataflash_probe(struct udevice *dev)
 	 */
 	info = jedec_probe(spi);
 	if (IS_ERR(info))
-		return PTR_ERR(info);
-	if (info != NULL)
-		add_dataflash(dev, info->name, info->nr_pages,
-			      info->pagesize, info->pageoffset,
-			      (info->flags & SUP_POW2PS) ? 'd' : 'c');
-	else {
-		/*
-		* Older chips support only legacy commands, identifing
-		* capacity using bits in the status byte.
-		*/
-		status = dataflash_status(spi);
-		if (status <= 0 || status == 0xff) {
-			printf("SPI DataFlash: read status error %d\n", status);
-			if (status == 0 || status == 0xff)
-				status = -ENODEV;
-			goto err_read_cmd;
-		}
-		/*
-		* if there's a device there, assume it's dataflash.
-		* board setup should have set spi->max_speed_max to
-		* match f(car) for continuous reads, mode 0 or 3.
-		*/
-		switch (status & 0x3c) {
-		case 0x0c:	/* 0 0 1 1 x x */
-			status = add_dataflash(dev, "AT45DB011B",
-					       512, 264, 9, 0);
-			break;
-		case 0x14:	/* 0 1 0 1 x x */
-			status = add_dataflash(dev, "AT45DB021B",
-					       1024, 264, 9, 0);
-			break;
-		case 0x1c:	/* 0 1 1 1 x x */
-			status = add_dataflash(dev, "AT45DB041x",
-					       2048, 264, 9, 0);
-			break;
-		case 0x24:	/* 1 0 0 1 x x */
-			status = add_dataflash(dev, "AT45DB081B",
-					       4096, 264, 9, 0);
-			break;
-		case 0x2c:	/* 1 0 1 1 x x */
-			status = add_dataflash(dev, "AT45DB161x",
-					       4096, 528, 10, 0);
-			break;
-		case 0x34:	/* 1 1 0 1 x x */
-			status = add_dataflash(dev, "AT45DB321x",
-					       8192, 528, 10, 0);
-			break;
-		case 0x38:	/* 1 1 1 x x x */
-		case 0x3c:
-			status = add_dataflash(dev, "AT45DB642x",
-					       8192, 1056, 11, 0);
-			break;
-		/* obsolete AT45DB1282 not (yet?) supported */
-		default:
-			dev_info(&spi->dev, "unsupported device (%x)\n",
-				 status & 0x3c);
+		goto err_jedec_probe;
+	if (info != NULL) {
+		status = add_dataflash(dev, info->name, info->nr_pages,
+				info->pagesize, info->pageoffset,
+				(info->flags & SUP_POW2PS) ? 'd' : 'c');
+		if (status < 0)
+			goto err_status;
+	}
+
+	/*
+	* Older chips support only legacy commands, identifing
+	* capacity using bits in the status byte.
+	*/
+	status = dataflash_status(spi);
+	if (status <= 0 || status == 0xff) {
+		printf("SPI DataFlash: read status error %d\n", status);
+		if (status == 0 || status == 0xff)
 			status = -ENODEV;
-			goto err_read_cmd;
-		}
+		goto err_jedec_probe;
 	}
 
-	spi_release_bus(spi);
+	/*
+	* if there's a device there, assume it's dataflash.
+	* board setup should have set spi->max_speed_max to
+	* match f(car) for continuous reads, mode 0 or 3.
+	*/
+	switch (status & 0x3c) {
+	case 0x0c:	/* 0 0 1 1 x x */
+		status = add_dataflash(dev, "AT45DB011B", 512, 264, 9, 0);
+		break;
+	case 0x14:	/* 0 1 0 1 x x */
+		status = add_dataflash(dev, "AT45DB021B", 1024, 264, 9, 0);
+		break;
+	case 0x1c:	/* 0 1 1 1 x x */
+		status = add_dataflash(dev, "AT45DB041x", 2048, 264, 9, 0);
+		break;
+	case 0x24:	/* 1 0 0 1 x x */
+		status = add_dataflash(dev, "AT45DB081B", 4096, 264, 9, 0);
+		break;
+	case 0x2c:	/* 1 0 1 1 x x */
+		status = add_dataflash(dev, "AT45DB161x", 4096, 528, 10, 0);
+		break;
+	case 0x34:	/* 1 1 0 1 x x */
+		status = add_dataflash(dev, "AT45DB321x", 8192, 528, 10, 0);
+		break;
+	case 0x38:	/* 1 1 1 x x x */
+	case 0x3c:
+		status = add_dataflash(dev, "AT45DB642x", 8192, 1056, 11, 0);
+		break;
+	/* obsolete AT45DB1282 not (yet?) supported */
+	default:
+		dev_info(&spi->dev, "unsupported device (%x)\n",
+				 status & 0x3c);
+		status = -ENODEV;
+		goto err_status;
+	}
 
-	return 0;
+	return status;
 
-err_read_cmd:
+err_status:
+	spi_free_slave(spi);
+err_jedec_probe:
 	spi_release_bus(spi);
-
 	return status;
 }
 
-- 
1.9.1

  parent reply	other threads:[~2016-11-16  4:03 UTC|newest]

Thread overview: 55+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-11-16  4:02 [U-Boot] [PATCH v6 00/21] sf: Updates on flash detection Jagan Teki
2016-11-16  4:02 ` [U-Boot] [PATCH v6 01/21] sf: Adopt flash table INFO macro from Linux Jagan Teki
2016-11-16  5:23   ` Siva Durga Prasad Paladugu
2016-11-16 12:39     ` Jagan Teki
2016-11-16 12:51       ` Siva Durga Prasad Paladugu
2016-11-18  7:05       ` Siva Durga Prasad Paladugu
2016-11-17  0:29   ` york sun
2016-11-16  4:02 ` [U-Boot] [PATCH v6 02/21] sf: Simplify lock ops detection code Jagan Teki
2016-11-16  5:38   ` Siva Durga Prasad Paladugu
2016-11-16  4:02 ` [U-Boot] [PATCH v6 03/21] sf: sandbox: Use JEDEC_MFR|ID in id exctract Jagan Teki
2016-11-16  5:42   ` Siva Durga Prasad Paladugu
2016-11-16  4:02 ` [U-Boot] [PATCH v6 04/21] sf: Cleanup spi_flash_info{} Jagan Teki
2016-11-16  5:49   ` Siva Durga Prasad Paladugu
2016-11-16  4:02 ` [U-Boot] [PATCH v6 05/21] sf: nr_sectors -> n_sectors Jagan Teki
2016-11-16  5:52   ` Siva Durga Prasad Paladugu
2016-11-16  4:02 ` [U-Boot] [PATCH v6 06/21] sf: Add SPI_FLASH_MAX_ID_LEN Jagan Teki
2016-11-16  5:56   ` Siva Durga Prasad Paladugu
2016-11-16 12:42     ` Jagan Teki
2016-11-16 13:07       ` Siva Durga Prasad Paladugu
2016-11-16  4:02 ` [U-Boot] [PATCH v6 07/21] sf: Increase max id length by 1 byte Jagan Teki
2016-11-16  6:00   ` Siva Durga Prasad Paladugu
2016-11-16  6:02   ` Siva Durga Prasad Paladugu
2016-11-16  4:02 ` [U-Boot] [PATCH v6 08/21] sf: Add INFO6 flash_info macro Jagan Teki
2016-11-16  6:09   ` Siva Durga Prasad Paladugu
2016-11-16 12:24     ` Jagan Teki
2016-11-16  4:03 ` [U-Boot] [PATCH v6 09/21] sf: params: Add S25FS256S_64K spi flash support Jagan Teki
2016-11-16  6:34   ` Siva Durga Prasad Paladugu
2016-11-16  4:03 ` [U-Boot] [PATCH v6 10/21] sf: Remove legacy idcode detection code Jagan Teki
2016-11-16  6:40   ` Siva Durga Prasad Paladugu
2016-11-16  4:03 ` [U-Boot] [PATCH v6 11/21] sf: Remove non-meaningful comments Jagan Teki
2016-11-16  6:42   ` Siva Durga Prasad Paladugu
2016-11-16  4:03 ` [U-Boot] [PATCH v6 12/21] sf: Rename sf_params.c to spi_flash_ids.c Jagan Teki
2016-11-16  6:44   ` Siva Durga Prasad Paladugu
2016-11-16  4:03 ` [U-Boot] [PATCH v6 13/21] sf: ids: Use small letter's with flash name Jagan Teki
2016-11-16  6:48   ` Siva Durga Prasad Paladugu
2016-11-16  4:03 ` [U-Boot] [PATCH v6 14/21] sf: ids: Use small letter in ext_jedec Jagan Teki
2016-11-16  6:50   ` Siva Durga Prasad Paladugu
2016-11-16  4:03 ` [U-Boot] [PATCH v6 15/21] sf: Rename few local functions Jagan Teki
2016-11-16  4:03 ` [U-Boot] [PATCH v6 16/21] spi: Remove dual flash options/flags Jagan Teki
2016-11-16  6:57   ` Siva Durga Prasad Paladugu
2016-11-16 13:52     ` Jagan Teki
2016-11-17  6:23       ` Siva Durga Prasad Paladugu
2016-11-17  6:28         ` Jagan Teki
2016-11-16  4:03 ` [U-Boot] [PATCH v6 17/21] sf: dataflash: Remove unneeded spi data Jagan Teki
2016-11-16  4:03 ` [U-Boot] [PATCH v6 18/21] sf: dataflash: Move flash id detection into jedec_probe Jagan Teki
2016-11-16  4:03 ` Jagan Teki [this message]
2016-11-16  4:03 ` [U-Boot] [PATCH v6 20/21] sf: dataflash: Minor cleanups Jagan Teki
2016-11-16  4:03 ` [U-Boot] [PATCH v6 21/21] sf: Fix s25fs512s id param table Jagan Teki
2016-11-16  7:02   ` Siva Durga Prasad Paladugu
2016-11-16 12:45     ` Jagan Teki
2016-11-16 13:04       ` Siva Durga Prasad Paladugu
2016-11-16 13:47         ` Jagan Teki
2016-11-16 18:00           ` Jagan Teki
2016-11-17  3:57           ` Vignesh R
2016-11-18 11:09 ` [U-Boot] [PATCH v6 00/21] sf: Updates on flash detection Jagan Teki

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1479268992-26811-20-git-send-email-jagan@openedev.com \
    --to=jagan@openedev.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox