void mdp4_mddi_kickoff_ui(struct msm_fb_data_type *mfd, struct mdp4_overlay_pipe *pipe) { if (mdp4_overlay_mixer_play(mddi_pipe->mixer_num) > 0) { #ifdef MDDI_TIMER mddi_add_delay_timer(10); #endif atomic_set(&mddi_delay_kickoff_cnt, 1); INIT_COMPLETION(mddi_delay_comp); mutex_unlock(&mfd->dma->ov_mutex); wait_for_completion_killable(&mddi_delay_comp); mutex_lock(&mfd->dma->ov_mutex); } mdp4_mddi_overlay_kickoff(mfd, pipe); }
void mdp4_mddi_kickoff_ui(struct msm_fb_data_type *mfd, struct mdp4_overlay_pipe *pipe) { if (mdp4_overlay_mixer_play(mddi_pipe->mixer_num) > 0) { #ifdef MDDI_TIMER mddi_add_delay_timer(10); #endif atomic_set(&mddi_delay_kickoff_cnt, 1); INIT_COMPLETION(mddi_delay_comp); up(&mfd->dma->ov_sem); wait_for_completion_killable(&mddi_delay_comp); down(&mfd->dma->ov_sem); /* semaphore was re-locked, wait for DMA completion again*/ mdp4_mddi_dma_busy_wait(mfd, pipe); } mdp4_mddi_overlay_kickoff(mfd, pipe); }