Skip to content
Snippets Groups Projects
Commit e2053f9c authored by Markus Klotzbcher's avatar Markus Klotzbcher Committed by Markus Klotzbcher
Browse files

Moved the waiting loop for "Read Data Request" RDDREQ into the

delta_cmdfunc function, because this bit is only set once after a command
is sent and this allows read functions to be called multiple times.
parent bb1ff049
No related merge requests found
......@@ -55,13 +55,6 @@ static void delta_read_buf(struct mtd_info *mtd, u_char* const buf, int len)
{
int i, j;
while(1) {
if(NDSR & NDSR_RDDREQ) {
NDSR |= NDSR_RDDREQ;
break;
}
}
/* we have to be carefull not to overflow the buffer if len is
* not a multiple of 4 */
unsigned long num_words = len & 0xfffffffc;
......@@ -90,19 +83,25 @@ static void delta_read_buf(struct mtd_info *mtd, u_char* const buf, int len)
static unsigned long read_buf = 0;
static unsigned char bytes_read = 0;
/* wait for read request */
static void delta_wait_event(unsigned long event)
{
if(!event)
return;
while(1) {
if(NDSR & event) {
NDSR |= event;
break;
}
}
}
static u_char delta_read_byte(struct mtd_info *mtd)
{
/* struct nand_chip *this = mtd->priv; */
unsigned char byte;
if(bytes_read == 0) {
/* wait for read request */
while(1) {
if(NDSR & NDSR_RDDREQ) {
NDSR |= NDSR_RDDREQ;
break;
}
}
read_buf = NDDB;
printk("delta_read_byte: 0x%x.\n", read_buf);
}
......@@ -119,7 +118,7 @@ static void delta_cmdfunc(struct mtd_info *mtd, unsigned command,
int column, int page_addr)
{
/* register struct nand_chip *this = mtd->priv; */
unsigned long ndcb0=0, ndcb1=0, ndcb2=0;
unsigned long ndcb0=0, ndcb1=0, ndcb2=0, event=0;
/* clear the ugly byte read buffer */
bytes_read = 0;
......@@ -153,10 +152,12 @@ static void delta_cmdfunc(struct mtd_info *mtd, unsigned command,
((page_addr<<8) & 0xff00) |
((page_addr<<8) & 0xff0000) |
((page_addr<<8) & 0xff000000)); /* make this 0x01000000 ? */
event = NDSR_RDDREQ;
break;
case NAND_CMD_READID:
printk("delta_cmdfunc: NAND_CMD_READID.\n");
ndcb0 = (NAND_CMD_READID | (3 << 21) | (1 << 16)); /* addr cycles*/
event = NDSR_RDDREQ;
break;
case NAND_CMD_PAGEPROG:
break;
......@@ -190,6 +191,9 @@ static void delta_cmdfunc(struct mtd_info *mtd, unsigned command,
NDCB0 = ndcb0;
NDCB0 = ndcb1;
NDCB0 = ndcb2;
/* wait for event */
delta_wait_event(event);
}
static void delta_dfc_gpio_init()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment