modified for mcp nand
author黄心宇 <hxy@rock-chips.com>
Thu, 3 Jun 2010 03:46:56 +0000 (03:46 +0000)
committer黄涛 <huangtao@rock-chips.com>
Mon, 21 Jun 2010 05:35:22 +0000 (13:35 +0800)
drivers/mtd/nand/rk2818_nand.c

index 31a9cb8f2a03d034e8ef15507dca81982d5c2b99..9e317192f12cb510aabc578921767a7445e7417e 100644 (file)
@@ -37,6 +37,7 @@
 #define PROGRAM_BUSY_COUNT   10000
 #define ERASE_BUSY_COUNT           20000
 #define READ_BUSY_COUNT            5000
+#define RESET_BUSY_COUNT                       20000
 
 /* Define delays in microsec for NAND device operations */
 #define TROP_US_DELAY   2000
@@ -312,6 +313,7 @@ static void rk2818_nand_cmdfunc(struct mtd_info *mtd, unsigned command,int colum
                  
                }
                
+               rk2818_nand_wait_busy(mtd,READ_BUSY_COUNT);
                break;
                
        case NAND_CMD_READ0:
@@ -350,8 +352,8 @@ static void rk2818_nand_cmdfunc(struct mtd_info *mtd, unsigned command,int colum
                {
                        if ( column>= 0 )
                         {
-                          pRK28NC ->chip[master->cs].addr = (column + mtd->writesize) & 0xff;  
-                            pRK28NC ->chip[master->cs].addr = ( (column + mtd->writesize)  >> 8) & 0xff;
+                          pRK28NC ->chip[master->cs].addr = column  & 0xff;    
+                            pRK28NC ->chip[master->cs].addr = ( column   >> 8) & 0xff;
                         }
                        if ( page_addr>=0 )
                           {
@@ -434,10 +436,27 @@ static void rk2818_nand_cmdfunc(struct mtd_info *mtd, unsigned command,int colum
        case NAND_CMD_STATUS:
                pRK28NC ->BCHCTL = 0x0;
                pRK28NC ->chip[master->cs].cmd = command;
+               while (timeout>0)
+               {
+                 timeout --;
+                  udelay(1);  
+                 if(pRK28NC->FLCTL&FL_INTCLR)
+                        break;
+                 
+               }
                break;
 
        case NAND_CMD_RESET:
                pRK28NC ->chip[master->cs].cmd = command;
+               while (timeout>0)
+               {
+                 timeout --;
+                  udelay(1);  
+                 if(pRK28NC->FLCTL&FL_INTCLR)
+                        break;
+                 
+               }
+               rk2818_nand_wait_busy(mtd,RESET_BUSY_COUNT);
                break;
 
        /* This applies to read commands */