From a130ff45c131e39f57c7109100aded3f7e423ec2 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=E9=BB=84=E5=BF=83=E5=AE=87?= Date: Thu, 3 Jun 2010 03:46:56 +0000 Subject: [PATCH] modified for mcp nand --- drivers/mtd/nand/rk2818_nand.c | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/drivers/mtd/nand/rk2818_nand.c b/drivers/mtd/nand/rk2818_nand.c index 31a9cb8f2a03..9e317192f12c 100644 --- a/drivers/mtd/nand/rk2818_nand.c +++ b/drivers/mtd/nand/rk2818_nand.c @@ -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 */ -- 2.34.1