mtd: sh_flctl: Implement NAND_CMD_RNDOUT command
authorBastian Hecht <hechtb@googlemail.com>
Thu, 1 Mar 2012 09:48:38 +0000 (10:48 +0100)
committerDavid Woodhouse <David.Woodhouse@intel.com>
Mon, 26 Mar 2012 23:42:51 +0000 (00:42 +0100)
Implements the command to seek and read in pages.

Signed-off-by: Bastian Hecht <hechtb@gmail.com>
Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
drivers/mtd/nand/sh_flctl.c

index 407acb51469cd2b2b1af4a0ee2521513cdcd2b1c..61e41c065db8292b8a798c421486d08982c83108 100644 (file)
@@ -303,6 +303,7 @@ static void set_cmd_regs(struct mtd_info *mtd, uint32_t cmd, uint32_t flcmcdr_va
                break;
        case NAND_CMD_READ0:
        case NAND_CMD_READOOB:
+       case NAND_CMD_RNDOUT:
                addr_len_bytes = flctl->rw_ADRCNT;
                flcmdcr_val |= CDSRC_E;
                if (flctl->chip.options & NAND_BUSWIDTH_16)
@@ -558,6 +559,21 @@ static void flctl_cmdfunc(struct mtd_info *mtd, unsigned int command,
                flctl->read_bytes = mtd->oobsize;
                goto read_normal_exit;
 
+       case NAND_CMD_RNDOUT:
+               if (flctl->hwecc)
+                       break;
+
+               if (flctl->page_size)
+                       set_cmd_regs(mtd, command, (NAND_CMD_RNDOUTSTART << 8)
+                               | command);
+               else
+                       set_cmd_regs(mtd, command, command);
+
+               set_addr(mtd, column, 0);
+
+               flctl->read_bytes = mtd->writesize + mtd->oobsize - column;
+               goto read_normal_exit;
+
        case NAND_CMD_READID:
                set_cmd_regs(mtd, command, command);