__s32 NAND_WaitRbReady(void) { __u32 rb; NAND_EnRbInt(); //wait_event(NAND_RB_WAIT, nandrb_ready_flag); dbg_rbint("rb wait, nfc_ctl: 0x%x, rb status: 0x%x, rb int en: 0x%x\n", NFC_READ_REG(NFC_REG_CTL), NFC_READ_REG(NFC_REG_ST), NFC_READ_REG(NFC_REG_INT)); if(nandrb_ready_flag) { dbg_rbint("fast rb int\n"); NAND_ClearRbInt(); return 0; } rb= ( NFC_READ_REG(NFC_REG_CTL) & NFC_RB_SEL ) >>3; if(!rb) { if(NFC_READ_REG(NFC_REG_ST) & NFC_RB_STATE0) { dbg_rbint_wrn("rb0 fast ready \n"); dbg_rbint_wrn("nfc_ctl: 0x%x, rb status: 0x%x, rb int en: 0x%x\n", NFC_READ_REG(NFC_REG_CTL), NFC_READ_REG(NFC_REG_ST), NFC_READ_REG(NFC_REG_INT)); NAND_ClearRbInt(); return 0; } } else { if(NFC_READ_REG(NFC_REG_ST) & NFC_RB_STATE1) { dbg_rbint_wrn("rb1 fast ready \n"); dbg_rbint_wrn("nfc_ctl: 0x%x, rb status: 0x%x, rb int en: 0x%x\n", NFC_READ_REG(NFC_REG_CTL), NFC_READ_REG(NFC_REG_ST), NFC_READ_REG(NFC_REG_INT)); NAND_ClearRbInt(); return 0; } } if(wait_event_timeout(NAND_RB_WAIT, nandrb_ready_flag, 1*HZ)==0) { dbg_rbint_wrn("nand wait rb ready time out\n"); dbg_rbint_wrn("rb wait time out, nfc_ctl: 0x%x, rb status: 0x%x, rb int en: 0x%x\n", NFC_READ_REG(NFC_REG_CTL), NFC_READ_REG(NFC_REG_ST), NFC_READ_REG(NFC_REG_INT)); NAND_ClearRbInt(); } else { dbg_rbint("nand wait rb ready ok\n"); } return 0; }
__s32 NAND_WaitRbReady(void) { __u32 rb; __u32 nand_index; dbg_rbint("NAND_WaitRbReady... \n"); nand_index = NAND_GetCurrentCH(); if(nand_index >1) printk("NAND_ClearDMAInt, nand_index error: 0x%x\n", nand_index); NAND_EnRbInt(); //wait_event(NAND_RB_WAIT, nandrb_ready_flag); dbg_rbint("rb wait \n"); if(nandrb_ready_flag[nand_index]) { dbg_rbint("fast rb int\n"); NAND_ClearRbInt(); return 0; } rb= NFC_GetRbSelect(); if(NFC_GetRbStatus(rb)) { dbg_rbint("rb %u fast ready \n", rb); NAND_ClearRbInt(); return 0; } //printk("NAND_WaitRbReady, ch %d\n", nand_index); if(nand_index == 0) { if(wait_event_timeout(NAND_RB_WAIT_CH0, nandrb_ready_flag[nand_index], 1*HZ)==0) { dbg_rbint_wrn("nand wait rb int time out, ch: %d\n", nand_index); NAND_ClearRbInt(); } else { NAND_ClearRbInt(); dbg_rbint("nand wait rb ready ok\n"); } } else if(nand_index ==1) { if(wait_event_timeout(NAND_RB_WAIT_CH1, nandrb_ready_flag[nand_index], 1*HZ)==0) { dbg_rbint_wrn("nand wait rb int time out, ch: %d\n", nand_index); NAND_ClearRbInt(); } else { NAND_ClearRbInt(); dbg_rbint("nand wait rb ready ok\n"); } } else { NAND_ClearRbInt(); } return 0; }