static int mt_isp_write_reg(mt_isp_reg_io_t *preg_io) { int ret = 0; int size = preg_io->count * sizeof(mt_isp_reg_t); int hold_size = hold_count * sizeof(mt_isp_reg_t); mt_isp_reg_t *preg = (mt_isp_reg_t *) (pwrite_buf + hold_size); if (dbgMask & ISP_DBG_WRITE_REG) { //seanlin ISP_LOG("[mt_isp_write_reg] data: 0x%x, count: %d \n", (u32) preg_io->data, (u32) preg_io->count); } // if (atomic_read(&hold_reg)) { if (atomic_read(&writing_reg)) { int timeout; // Should wait until write done if (dbgMask & ISP_DBG_TASKLET) { //seanlin ISP_LOG("[mt_isp_write_reg] Start wait ... \n"); } timeout = wait_event_interruptible_timeout( isp_wait_queue, atomic_read(&writing_reg) == 0 , ms_to_jiffies(500)); if (dbgMask & ISP_DBG_TASKLET) { //seanlin ISP_LOG("[mt_isp_write_reg] End wait \n"); } if (timeout == 0) { ISP_ERR("Should not happen \n"); ret = -EFAULT; goto mt_isp_write_reg_exit; } } } // if ((size + hold_size) > buf_size) { ISP_ERR("size too big \n"); ret = -EFAULT; goto mt_isp_write_reg_exit; } // if (copy_from_user((u8 *)preg, (u8 *) preg_io->data, size) != 0) { ISP_ERR("copy_from_user failed \n"); ret = -EFAULT; goto mt_isp_write_reg_exit; } // if (atomic_read(&hold_reg)) { // Write register to buffer hold_count += preg_io->count; } else { // Write register to hw ret = mt_isp_write_reg_to_hw(preg, preg_io->count); } // mt_isp_write_reg_exit: return ret; }
/*=======================================================================*/ static int MT6573FDVT_WaitIRQ(u32 * u4IRQMask) { int timeout; timeout=wait_event_interruptible_timeout(g_MT6573FDVTWQ, (g_u4MT6573FDVTIRQMSK & g_u4MT6573FDVTIRQ) , ms_to_jiffies(500)); if (timeout == 0) { FDVTPARMDB("wait_event_interruptible_timeout timeout, %d, %d \n", g_u4MT6573FDVTIRQMSK, g_u4MT6573FDVTIRQ); iowrite32(0x00030000, FDVT_START); //LDVT Disable iowrite32(0x00000000, FDVT_START); //LDVT Disable return -EAGAIN; } *u4IRQMask = g_u4MT6573FDVTIRQ; //FDVTPARMDB("[FDVT] IRQ : 0x%8x \n",g_u4MT6573FDVTIRQ); if (! (g_u4MT6573FDVTIRQMSK & g_u4MT6573FDVTIRQ)) { FDVTPARMDB("wait_event_interruptible Not FDVT, %d, %d \n", g_u4MT6573FDVTIRQMSK, g_u4MT6573FDVTIRQ); MT6573FDVT_DUMPREG(); return -1; } g_u4MT6573FDVTIRQ = 0; return 0; }