public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
From: Jagan Teki <jteki@openedev.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v7 31/34] sf: dataflash: Fix add_dataflash return logic
Date: Thu, 26 Nov 2015 17:34:15 +0530	[thread overview]
Message-ID: <1448539458-14306-32-git-send-email-jteki@openedev.com> (raw)
In-Reply-To: <1448539458-14306-1-git-send-email-jteki@openedev.com>

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

Cc: Haikun Wang <haikun.wang@freescale.com>
Signed-off-by: Jagan Teki <jteki@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:[~2015-11-26 12:04 UTC|newest]

Thread overview: 77+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-11-26 12:03 [U-Boot] [PATCH v7 00/34] sf: MTD support Jagan Teki
2015-11-26 12:03 ` [U-Boot] [PATCH v7 01/34] sf: spi_flash_validate_params => spi_flash_scan Jagan Teki
2015-11-26 17:50   ` Simon Glass
2015-11-26 12:03 ` [U-Boot] [PATCH v7 02/34] sf: Move spi_flash_scan code to sf_ops Jagan Teki
2015-11-26 17:50   ` Simon Glass
2015-11-26 12:03 ` [U-Boot] [PATCH v7 03/34] sf: Move read_id " Jagan Teki
2015-11-26 17:50   ` Simon Glass
2015-11-26 12:03 ` [U-Boot] [PATCH v7 04/34] sf: probe: Code cleanup Jagan Teki
2015-11-26 17:50   ` Simon Glass
2015-11-26 12:03 ` [U-Boot] [PATCH v7 05/34] sf: Use static for file-scope functions Jagan Teki
2015-11-26 12:03 ` [U-Boot] [PATCH v7 06/34] sf: Fix Makefile Jagan Teki
2015-11-26 17:50   ` Simon Glass
2015-12-03 10:20   ` Bin Meng
2015-11-26 12:03 ` [U-Boot] [PATCH v7 07/34] sf: Use simple name for register access functions Jagan Teki
2015-11-26 17:50   ` Simon Glass
2015-11-26 12:03 ` [U-Boot] [PATCH v7 08/34] sf: Use flash function pointers in dm_spi_flash_ops Jagan Teki
2015-11-26 17:50   ` Simon Glass
2015-12-03 16:42     ` Jagan Teki
2015-11-26 12:03 ` [U-Boot] [PATCH v7 09/34] sf: Flash power up read-only based on idcode0 Jagan Teki
2015-11-26 17:50   ` Simon Glass
2015-11-26 12:03 ` [U-Boot] [PATCH v7 10/34] sf: Use static for file-scope functions Jagan Teki
2015-11-26 17:50   ` Simon Glass
2015-11-26 12:03 ` [U-Boot] [PATCH v7 11/34] sf: Remove unneeded header includes Jagan Teki
2015-11-26 17:50   ` Simon Glass
2015-11-26 12:03 ` [U-Boot] [PATCH v7 12/34] sf: probe: Use spi_flash_scan in dm-spi-flash Jagan Teki
2015-11-26 17:50   ` Simon Glass
2015-11-26 19:10     ` Jagan Teki
2015-11-26 12:03 ` [U-Boot] [PATCH v7 13/34] sf: Re-factorize spi_flash_probe_tail code Jagan Teki
2015-11-26 17:50   ` Simon Glass
2015-11-26 12:03 ` [U-Boot] [PATCH v7 14/34] dm-sf: Re-factorize spi_flash_std_probe code Jagan Teki
2015-11-26 17:50   ` Simon Glass
2015-11-26 12:03 ` [U-Boot] [PATCH v7 15/34] zynq: Enable CONFIG_SPL_MTD_SUPPORT Jagan Teki
2015-11-26 17:50   ` Simon Glass
2015-11-26 12:04 ` [U-Boot] [PATCH v7 16/34] sf: Add MTD support to spi_flash Jagan Teki
2015-11-26 17:50   ` Simon Glass
2015-11-26 19:14     ` Jagan Teki
2015-11-26 12:04 ` [U-Boot] [PATCH v7 17/34] sf: Use mtd_info ops instead of spi_flash ops Jagan Teki
2015-11-26 12:04 ` [U-Boot] [PATCH v7 18/34] cmd_sf: Use mtd->size instead of flash->size Jagan Teki
2015-11-26 12:04 ` [U-Boot] [PATCH v7 19/34] sf: Use mtd->erasesize instead of flash->erase_size Jagan Teki
2015-11-26 12:04 ` [U-Boot] [PATCH v7 20/34] dm-sf: use mtd_ops, drop dm_spi_flash_ops Jagan Teki
2015-11-26 17:50   ` Simon Glass
2015-11-26 12:04 ` [U-Boot] [PATCH v7 21/34] sf: Use MTD lock operations Jagan Teki
2015-11-26 12:04 ` [U-Boot] [PATCH v7 22/34] sf: Add MTD support for non-dm spi_flash interface Jagan Teki
2015-11-26 17:50   ` Simon Glass
2015-11-26 12:04 ` [U-Boot] [PATCH v7 23/34] sf: probe: Minor cleanup Jagan Teki
2015-11-26 12:04 ` [U-Boot] [PATCH v7 24/34] sf: Drop SNOR_F_SST_WR flash->flags Jagan Teki
2015-11-26 12:04 ` [U-Boot] [PATCH v7 25/34] sf: Remove unneeded SST_BP and SST_WP Jagan Teki
2015-11-26 12:04 ` [U-Boot] [PATCH v7 26/34] sf: ops: Fix missing break on spansion read_bar Jagan Teki
2015-11-26 12:04 ` [U-Boot] [PATCH v7 27/34] sf: Drop SPI_FLASH_MTD driver Jagan Teki
2015-11-26 12:04 ` [U-Boot] [PATCH v7 28/34] configs: Remove CONFIG_SPI_FLASH_MTD Jagan Teki
2015-11-26 12:04 ` [U-Boot] [PATCH v7 29/34] sf: dataflash: Remove unneeded spi data Jagan Teki
2015-11-26 12:04 ` [U-Boot] [PATCH v7 30/34] sf: dataflash: Move flash id detection into jedec_probe Jagan Teki
2015-11-26 12:04 ` Jagan Teki [this message]
2015-11-26 12:04 ` [U-Boot] [PATCH v7 32/34] sf: dataflash: Add MTD core support Jagan Teki
2015-11-26 12:04 ` [U-Boot] [PATCH v7 33/34] sf: dataflash: Rename sf_dataflash.c to mtd_dataflash.c Jagan Teki
2015-11-26 12:04 ` [U-Boot] [PATCH v7 34/34] mtd: dataflash: Minor cleanups Jagan Teki
2015-11-26 12:24 ` [U-Boot] [PATCH v7 00/34] sf: MTD support Jagan Teki
2015-11-26 12:32   ` Stefan Roese
2015-11-26 12:46     ` Jagan Teki
2015-11-26 13:04       ` Stefan Roese
2015-11-26 13:24         ` Jagan Teki
2015-11-26 16:48         ` Simon Glass
2015-11-26 17:47           ` Stefan Roese
2015-11-26 17:55             ` Simon Glass
2015-11-26 18:12               ` Stefan Roese
2015-11-26 18:22                 ` Simon Glass
2015-11-27  4:01                   ` Stefan Roese
2015-11-27  6:32                     ` Stefan Roese
2015-11-26 17:50 ` Simon Glass
2015-11-26 18:54   ` Jagan Teki
2015-11-27  2:25     ` Bin Meng
2015-11-27  9:21       ` Jagan Teki
2015-11-30 23:17         ` Simon Glass
2015-12-03 10:14           ` Jagan Teki
2015-11-27  2:51     ` Simon Glass
2015-11-27  1:54 ` Bin Meng
2015-11-27  8:50   ` 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=1448539458-14306-32-git-send-email-jteki@openedev.com \
    --to=jteki@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