mtd: sh_flctl: Expand the READID command to 8 bytes
authorBastian Hecht <hechtb@googlemail.com>
Thu, 1 Mar 2012 09:48:37 +0000 (10:48 +0100)
committerDavid Woodhouse <David.Woodhouse@intel.com>
Mon, 26 Mar 2012 23:42:44 +0000 (00:42 +0100)
The nand base code wants to read out 8 bytes in the READID command.
Reflect this in the driver code.

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 9291066..407acb5 100644 (file)
@@ -320,6 +320,7 @@ static void set_cmd_regs(struct mtd_info *mtd, uint32_t cmd, uint32_t flcmcdr_va
                break;
        case NAND_CMD_READID:
                flcmncr_val &= ~SNAND_E;
+               flcmdcr_val |= CDSRC_E;
                addr_len_bytes = ADRCNT_1;
                break;
        case NAND_CMD_STATUS:
@@ -559,13 +560,18 @@ static void flctl_cmdfunc(struct mtd_info *mtd, unsigned int command,
 
        case NAND_CMD_READID:
                set_cmd_regs(mtd, command, command);
-               set_addr(mtd, 0, 0);
 
-               flctl->read_bytes = 4;
+               /* READID is always performed using an 8-bit bus */
+               if (flctl->chip.options & NAND_BUSWIDTH_16)
+                       column <<= 1;
+               set_addr(mtd, column, 0);
+
+               flctl->read_bytes = 8;
                writel(flctl->read_bytes, FLDTCNTR(flctl)); /* set read size */
                empty_fifo(flctl);
                start_translation(flctl);
-               read_datareg(flctl, 0); /* read and end */
+               read_fiforeg(flctl, flctl->read_bytes, 0);
+               wait_completion(flctl);
                break;
 
        case NAND_CMD_ERASE1: