[PATCH 1/1] MTD DataFlash: fix bug - ATMEL AT45DF321D spi flash card fails to be copied to

From: Bryan Wu
Date: Sat May 31 2008 - 06:39:12 EST


From: Michael Hennerich <michael.hennerich@xxxxxxxxxx>

- Add support for binary page size DataFlashes.
- The driver now prints out pagesize and erasesize.
Printout valuable information for creating flash filesystems.

Signed-off-by: Michael Hennerich <michael.hennerich@xxxxxxxxxx>
Signed-off-by: Bryan Wu <cooloney@xxxxxxxxxx>
---
drivers/mtd/devices/mtd_dataflash.c | 38 ++++++++++++++++++++++++++--------
1 files changed, 29 insertions(+), 9 deletions(-)

diff --git a/drivers/mtd/devices/mtd_dataflash.c b/drivers/mtd/devices/mtd_dataflash.c
index b35e481..a47fe58 100644
--- a/drivers/mtd/devices/mtd_dataflash.c
+++ b/drivers/mtd/devices/mtd_dataflash.c
@@ -487,7 +487,9 @@ add_dataflash(struct spi_device *spi, char *name,
device->write = dataflash_write;
device->priv = priv;

- dev_info(&spi->dev, "%s (%d KBytes)\n", name, device->size/1024);
+ dev_info(&spi->dev, "%s (%d KBytes) pagesize %d bytes, "
+ "erasesize %d bytes\n", name, device->size/1024,
+ pagesize, pagesize * 8); /* 8 pages = 1 block */
dev_set_drvdata(&spi->dev, priv);

if (mtd_has_partitions()) {
@@ -524,10 +526,13 @@ add_dataflash(struct spi_device *spi, char *name,
* AT45DB021B 2Mbit (256K) xx0101xx (0x14) 1025 264 9
* AT45DB041B 4Mbit (512K) xx0111xx (0x1c) 2048 264 9
* AT45DB081B 8Mbit (1M) xx1001xx (0x24) 4096 264 9
- * AT45DB0161B 16Mbit (2M) xx1011xx (0x2c) 4096 528 10
- * AT45DB0321B 32Mbit (4M) xx1101xx (0x34) 8192 528 10
- * AT45DB0642 64Mbit (8M) xx111xxx (0x3c) 8192 1056 11
- * AT45DB1282 128Mbit (16M) xx0100xx (0x10) 16384 1056 11
+ * AT45DB0161B 16Mbit (2M) xx1011x0 (0x2c) 4096 528 10
+ * AT45DB0161B 16Mbit (2M) xx1011x1 (0x2d) 4096 512 9
+ * AT45DB0321B 32Mbit (4M) xx1101x0 (0x34) 8192 528 10
+ * AT45DB0321B 32Mbit (4M) xx1101x1 (0x35) 8192 512 9
+ * AT45DB0642 64Mbit (8M) xx111xx0 (0x3c) 8192 1056 11
+ * AT45DB0642 64Mbit (8M) xx111xx1 (0x3d) 8192 1024 10
+ * AT45DB1282 128Mbit (16M) xx0100x0 (0x10) 16384 1056 11
*/
static int __devinit dataflash_probe(struct spi_device *spi)
{
@@ -546,29 +551,44 @@ static int __devinit dataflash_probe(struct spi_device *spi)
* board setup should have set spi->max_speed_max to
* match f(car) for continuous reads, mode 0 or 3.
*/
- switch (status & 0x3c) {
+ switch (status & 0x3d) {
case 0x0c: /* 0 0 1 1 x x */
+ case 0x0d:
status = add_dataflash(spi, "AT45DB011B", 512, 264, 9);
break;
case 0x14: /* 0 1 0 1 x x */
+ case 0x15:
status = add_dataflash(spi, "AT45DB021B", 1025, 264, 9);
break;
case 0x1c: /* 0 1 1 1 x x */
+ case 0x1d:
status = add_dataflash(spi, "AT45DB041x", 2048, 264, 9);
break;
case 0x24: /* 1 0 0 1 x x */
+ case 0x25:
status = add_dataflash(spi, "AT45DB081B", 4096, 264, 9);
break;
- case 0x2c: /* 1 0 1 1 x x */
+ case 0x2c: /* 1 0 1 1 x 0 */
status = add_dataflash(spi, "AT45DB161x", 4096, 528, 10);
break;
- case 0x34: /* 1 1 0 1 x x */
+ case 0x34: /* 1 1 0 1 x 0 */
status = add_dataflash(spi, "AT45DB321x", 8192, 528, 10);
break;
- case 0x38: /* 1 1 1 x x x */
+ case 0x38: /* 1 1 1 x x 0 */
case 0x3c:
status = add_dataflash(spi, "AT45DB642x", 8192, 1056, 11);
break;
+ /* Binary page size factory preset / user set */
+ case 0x2d: /* 1 0 1 1 x 1 */
+ status = add_dataflash(spi, "AT45DB161x", 4096, 512, 9);
+ break;
+ case 0x35: /* 1 1 0 1 x 1 */
+ status = add_dataflash(spi, "AT45DB321x", 8192, 512, 9);
+ break;
+ case 0x39: /* 1 1 1 x x 1 */
+ case 0x3d:
+ status = add_dataflash(spi, "AT45DB642x", 8192, 1024, 10);
+ break;
/* obsolete AT45DB1282 not (yet?) supported */
default:
DEBUG(MTD_DEBUG_LEVEL1, "%s: unsupported device (%x)\n",
--
1.5.5

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/