]> git.kernelconcepts.de Git - karo-tx-uboot.git/commitdiff
mtd: vf610_nfc: remove read on SEQIN
authorStefan Agner <stefan@agner.ch>
Fri, 8 May 2015 17:07:07 +0000 (19:07 +0200)
committerLothar Waßmann <LW@KARO-electronics.de>
Tue, 8 Sep 2015 20:43:28 +0000 (22:43 +0200)
Since we do not support sub-page writes anyway, reading the page
back to the controller on SEQIN command is not required. Remove
the page read on SEQIN.

However, the column/page values relevant to the SEQIN command, hence
set the column/row address on SEQIN command.

Signed-off-by: Stefan Agner <stefan@agner.ch>
drivers/mtd/nand/vf610_nfc.c

index 40f3fc1537125c3c1c16f23512293e456e910fdd..e3e132740a46451fe53dbf6dad130688b4a5fed2 100644 (file)
@@ -345,24 +345,26 @@ static void vf610_nfc_command(struct mtd_info *mtd, unsigned command,
        nfc->alt_buf    = 0;
 
        switch (command) {
+       case NAND_CMD_SEQIN:
+               /* Use valid column/page from preread... */
+               vf610_nfc_addr_cycle(mtd, column, page);
+               /*
+                * SEQIN => data => PAGEPROG sequence is done by the controller
+                * hence we do not need to issue the command here...
+                */
+               return;
        case NAND_CMD_PAGEPROG:
                vf610_nfc_transfer_size(nfc->regs, nfc->page_sz);
                vf610_nfc_send_commands(nfc->regs, NAND_CMD_SEQIN,
                                        command, PROGRAM_PAGE_CMD_CODE);
-               vf610_nfc_addr_cycle(mtd, column, page);
                break;
 
        case NAND_CMD_RESET:
                vf610_nfc_transfer_size(nfc->regs, 0);
                vf610_nfc_send_command(nfc->regs, command, RESET_CMD_CODE);
                break;
-       /*
-        * NFC does not support sub-page reads and writes,
-        * so emulate them using full page transfers.
-        */
        case NAND_CMD_READOOB:
                nfc->spareonly = 1;
-       case NAND_CMD_SEQIN: /* Pre-read for partial writes. */
        case NAND_CMD_READ0:
                column = 0;
                vf610_nfc_transfer_size(nfc->regs, nfc->page_sz);