mxc nand: simplify command processing
Linux-MTD Mailing List
linux-mtd at lists.infradead.org
Mon Nov 30 07:59:05 EST 2009
Gitweb: http://git.infradead.org/?p=mtd-2.6.git;a=commit;h=89121a6bfecf4bd81b360fa1b3ae8875ed3e4a71
Commit: 89121a6bfecf4bd81b360fa1b3ae8875ed3e4a71
Parent: f8f9608d9b7a5b3349605284a4f3876e898413f1
Author: Sascha Hauer <s.hauer at pengutronix.de>
AuthorDate: Thu Jun 4 17:18:01 2009 +0200
Committer: Sascha Hauer <s.hauer at pengutronix.de>
CommitDate: Thu Nov 12 08:32:39 2009 +0100
mxc nand: simplify command processing
Instead of having two switch/case with other operations
in between, use only one switch/case
Signed-off-by: Sascha Hauer <s.hauer at pengutronix.de>
---
drivers/mtd/nand/mxc_nand.c | 81 ++++++++++++++++++------------------------
1 files changed, 35 insertions(+), 46 deletions(-)
diff --git a/drivers/mtd/nand/mxc_nand.c b/drivers/mtd/nand/mxc_nand.c
index 03d2008..67ddc35 100644
--- a/drivers/mtd/nand/mxc_nand.c
+++ b/drivers/mtd/nand/mxc_nand.c
@@ -533,7 +533,6 @@ static void mxc_nand_command(struct mtd_info *mtd, unsigned command,
{
struct nand_chip *nand_chip = mtd->priv;
struct mxc_nand_host *host = nand_chip->priv;
- int useirq = true;
DEBUG(MTD_DEBUG_LEVEL3,
"mxc_nand_command (cmd = 0x%x, col = 0x%x, page = 0x%x)\n",
@@ -548,19 +547,37 @@ static void mxc_nand_command(struct mtd_info *mtd, unsigned command,
case NAND_CMD_STATUS:
host->buf_start = 0;
host->status_request = true;
- break;
- case NAND_CMD_READ0:
- host->buf_start = column;
- useirq = false;
+ send_cmd(host, command, true);
+ mxc_do_addr_cycle(mtd, column, page_addr);
break;
+ case NAND_CMD_READ0:
case NAND_CMD_READOOB:
- host->buf_start = column + mtd->writesize;
+ if (command == NAND_CMD_READ0)
+ host->buf_start = column;
+ else
+ host->buf_start = column + mtd->writesize;
- useirq = false;
if (host->pagesize_2k)
command = NAND_CMD_READ0; /* only READ0 is valid */
+
+ send_cmd(host, command, false);
+ mxc_do_addr_cycle(mtd, column, page_addr);
+
+ if (host->pagesize_2k) {
+ /* send read confirm command */
+ send_cmd(host, NAND_CMD_READSTART, true);
+ /* read for each AREA */
+ send_page(host, 0, NFC_OUTPUT);
+ send_page(host, 1, NFC_OUTPUT);
+ send_page(host, 2, NFC_OUTPUT);
+ send_page(host, 3, NFC_OUTPUT);
+ } else
+ send_page(host, 0, NFC_OUTPUT);
+
+ memcpy(host->data_buf, host->regs + MAIN_AREA0, mtd->writesize);
+ copy_spare(mtd, true);
break;
case NAND_CMD_SEQIN:
@@ -589,7 +606,9 @@ static void mxc_nand_command(struct mtd_info *mtd, unsigned command,
if (!host->pagesize_2k)
send_cmd(host, NAND_CMD_READ0, false);
}
- useirq = false;
+
+ send_cmd(host, command, false);
+ mxc_do_addr_cycle(mtd, column, page_addr);
break;
case NAND_CMD_PAGEPROG:
@@ -604,51 +623,21 @@ static void mxc_nand_command(struct mtd_info *mtd, unsigned command,
send_page(host, 3, NFC_INPUT);
}
- break;
-
- case NAND_CMD_ERASE1:
- useirq = false;
- break;
- }
-
- /* Write out the command to the device. */
- send_cmd(host, command, useirq);
- mxc_do_addr_cycle(mtd, column, page_addr);
-
- /* Command post-processing step */
- switch (command) {
-
- case NAND_CMD_RESET:
- break;
-
- case NAND_CMD_READOOB:
- case NAND_CMD_READ0:
- if (host->pagesize_2k) {
- /* send read confirm command */
- send_cmd(host, NAND_CMD_READSTART, true);
- /* read for each AREA */
- send_page(host, 0, NFC_OUTPUT);
- send_page(host, 1, NFC_OUTPUT);
- send_page(host, 2, NFC_OUTPUT);
- send_page(host, 3, NFC_OUTPUT);
- } else
- send_page(host, 0, NFC_OUTPUT);
-
- memcpy(host->data_buf, host->regs + MAIN_AREA0, mtd->writesize);
- copy_spare(mtd, true);
+ send_cmd(host, command, true);
+ mxc_do_addr_cycle(mtd, column, page_addr);
break;
case NAND_CMD_READID:
+ send_cmd(host, command, true);
+ mxc_do_addr_cycle(mtd, column, page_addr);
send_read_id(host);
break;
- case NAND_CMD_PAGEPROG:
- break;
-
- case NAND_CMD_STATUS:
- break;
-
+ case NAND_CMD_ERASE1:
case NAND_CMD_ERASE2:
+ send_cmd(host, command, false);
+ mxc_do_addr_cycle(mtd, column, page_addr);
+
break;
}
}
More information about the linux-mtd-cvs
mailing list