提交 89121a6b 编写于 作者: S Sascha Hauer

mxc nand: simplify command processing

Instead of having two switch/case with other operations
in between, use only one switch/case
Signed-off-by: NSascha Hauer <s.hauer@pengutronix.de>
上级 f8f9608d
...@@ -533,7 +533,6 @@ static void mxc_nand_command(struct mtd_info *mtd, unsigned command, ...@@ -533,7 +533,6 @@ static void mxc_nand_command(struct mtd_info *mtd, unsigned command,
{ {
struct nand_chip *nand_chip = mtd->priv; struct nand_chip *nand_chip = mtd->priv;
struct mxc_nand_host *host = nand_chip->priv; struct mxc_nand_host *host = nand_chip->priv;
int useirq = true;
DEBUG(MTD_DEBUG_LEVEL3, DEBUG(MTD_DEBUG_LEVEL3,
"mxc_nand_command (cmd = 0x%x, col = 0x%x, page = 0x%x)\n", "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, ...@@ -548,19 +547,37 @@ static void mxc_nand_command(struct mtd_info *mtd, unsigned command,
case NAND_CMD_STATUS: case NAND_CMD_STATUS:
host->buf_start = 0; host->buf_start = 0;
host->status_request = true; host->status_request = true;
break;
case NAND_CMD_READ0: send_cmd(host, command, true);
host->buf_start = column; mxc_do_addr_cycle(mtd, column, page_addr);
useirq = false;
break; break;
case NAND_CMD_READ0:
case NAND_CMD_READOOB: 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) if (host->pagesize_2k)
command = NAND_CMD_READ0; /* only READ0 is valid */ 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; break;
case NAND_CMD_SEQIN: case NAND_CMD_SEQIN:
...@@ -589,7 +606,9 @@ static void mxc_nand_command(struct mtd_info *mtd, unsigned command, ...@@ -589,7 +606,9 @@ static void mxc_nand_command(struct mtd_info *mtd, unsigned command,
if (!host->pagesize_2k) if (!host->pagesize_2k)
send_cmd(host, NAND_CMD_READ0, false); send_cmd(host, NAND_CMD_READ0, false);
} }
useirq = false;
send_cmd(host, command, false);
mxc_do_addr_cycle(mtd, column, page_addr);
break; break;
case NAND_CMD_PAGEPROG: case NAND_CMD_PAGEPROG:
...@@ -604,51 +623,21 @@ static void mxc_nand_command(struct mtd_info *mtd, unsigned command, ...@@ -604,51 +623,21 @@ static void mxc_nand_command(struct mtd_info *mtd, unsigned command,
send_page(host, 3, NFC_INPUT); send_page(host, 3, NFC_INPUT);
} }
break; send_cmd(host, command, true);
mxc_do_addr_cycle(mtd, column, page_addr);
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);
break; break;
case NAND_CMD_READID: case NAND_CMD_READID:
send_cmd(host, command, true);
mxc_do_addr_cycle(mtd, column, page_addr);
send_read_id(host); send_read_id(host);
break; break;
case NAND_CMD_PAGEPROG: case NAND_CMD_ERASE1:
break;
case NAND_CMD_STATUS:
break;
case NAND_CMD_ERASE2: case NAND_CMD_ERASE2:
send_cmd(host, command, false);
mxc_do_addr_cycle(mtd, column, page_addr);
break; break;
} }
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册