static void mdp3_dma_done_intr_handler(int type, void *arg) { struct mdp3_dma *dma = (struct mdp3_dma *)arg; pr_debug("mdp3_dma_done_intr_handler\n"); complete(&dma->dma_comp); mdp3_irq_disable_nosync(type); }
static void mdp3_dma_done_intr_handler(int type, void *arg) { struct mdp3_dma *dma = (struct mdp3_dma *)arg; struct mdp3_notification dma_client; pr_debug("mdp3_dma_done_intr_handler\n"); spin_lock(&dma->dma_lock); dma_client = dma->dma_notifier_client; complete(&dma->dma_comp); spin_unlock(&dma->dma_lock); mdp3_irq_disable_nosync(type); if (dma_client.handler) dma_client.handler(dma_client.arg); }
static void mdp3_vsync_intr_handler(int type, void *arg) { struct mdp3_dma *dma = (struct mdp3_dma *)arg; struct mdp3_vsync_notification vsync_client; pr_debug("mdp3_vsync_intr_handler\n"); spin_lock(&dma->dma_lock); vsync_client = dma->vsync_client; complete(&dma->vsync_comp); spin_unlock(&dma->dma_lock); if (vsync_client.handler) vsync_client.handler(vsync_client.arg); else mdp3_irq_disable_nosync(type); }
static void mdp3_vsync_intr_handler(int type, void *arg) { struct mdp3_dma *dma = (struct mdp3_dma *)arg; struct mdp3_notification vsync_client; unsigned int wait_for_next_vs; pr_debug("mdp3_vsync_intr_handler\n"); spin_lock(&dma->dma_lock); vsync_client = dma->vsync_client; wait_for_next_vs = !dma->vsync_status; dma->vsync_status = 0; if (wait_for_next_vs) complete(&dma->vsync_comp); spin_unlock(&dma->dma_lock); if (vsync_client.handler) { vsync_client.handler(vsync_client.arg); } else { if (wait_for_next_vs) mdp3_irq_disable_nosync(type); } }