static void tegra_dc_continuous_irq(struct tegra_dc *dc, unsigned long status) { /* Schedule any additional bottom-half vblank actvities. */ if (status & V_BLANK_INT) queue_work(system_freezable_wq, &dc->vblank_work); if (status & FRAME_END_INT) { /* Mark the frame_end as complete. */ if (!completion_done(&dc->frame_end_complete)) complete(&dc->frame_end_complete); tegra_dc_trigger_windows(dc); } }
static void tegra_dc_one_shot_irq(struct tegra_dc *dc, unsigned long status) { /* pending user vblank, so wakeup */ if ((status & (V_BLANK_INT | MSF_INT)) && (dc->out->user_needs_vblank)) { dc->out->user_needs_vblank = false; complete(&dc->out->user_vblank_comp); } if (status & V_BLANK_INT) { /* Sync up windows. */ tegra_dc_trigger_windows(dc); /* Schedule any additional bottom-half vblank actvities. */ queue_work(system_freezable_wq, &dc->vblank_work); } if (status & FRAME_END_INT) { /* Mark the frame_end as complete. */ if (!completion_done(&dc->frame_end_complete)) complete(&dc->frame_end_complete); } }