Exemple #1
0
void mdp4_overlay_dsi_video_vsync_push(struct msm_fb_data_type *mfd,
			struct mdp4_overlay_pipe *pipe)
{
	unsigned long flag;

	if (pipe->flags & MDP_OV_PLAY_NOWAIT)
		return;

	if (dsi_pipe->blt_addr) {
		mdp4_overlay_dsi_video_dma_busy_wait(mfd);

		mdp4_dsi_video_blt_ov_update(dsi_pipe);
		dsi_pipe->ov_cnt++;

		spin_lock_irqsave(&mdp_spin_lock, flag);
		outp32(MDP_INTR_CLEAR, INTR_OVERLAY0_DONE);
		mdp_intr_mask |= INTR_OVERLAY0_DONE;
		outp32(MDP_INTR_ENABLE, mdp_intr_mask);
		mdp_enable_irq(MDP_OVERLAY0_TERM);
		mfd->dma->busy = TRUE;
		mb();	/* make sure all registers updated */
		spin_unlock_irqrestore(&mdp_spin_lock, flag);
		outpdw(MDP_BASE + 0x0004, 0); /* kickoff overlay engine */
		mb();
		mdp4_overlay_dsi_video_wait4event(mfd, INTR_DMA_P_DONE);
	} else {

		mdp4_overlay_dsi_video_wait4event(mfd, INTR_PRIMARY_VSYNC);
	}
}
Exemple #2
0
	// fixed the underrun for 1920 * 1080 video play at the full hd lcd.
static void mdp4_overlay_dsi_video_prefill(struct msm_fb_data_type *mfd) 
{ 
	unsigned long flag; 

	if (dsi_pipe->ov_blt_addr) {
		mdp4_overlay_dsi_video_dma_busy_wait(mfd); 
		mdp4_dsi_video_blt_ov_update(dsi_pipe);
		dsi_pipe->ov_cnt++; 
		spin_lock_irqsave(&mdp_spin_lock, flag); 
		outp32(MDP_INTR_CLEAR, INTR_OVERLAY0_DONE); 
		mdp_intr_mask |= INTR_OVERLAY0_DONE; 
		outp32(MDP_INTR_ENABLE, mdp_intr_mask); 
		mdp_enable_irq(MDP_OVERLAY0_TERM); 
		mfd->dma->busy = TRUE;
		mb();	/* make sure all registers updated */ 
		spin_unlock_irqrestore(&mdp_spin_lock, flag); 
		outpdw(MDP_BASE + 0x0004, 0); /* kickoff overlay engine */ 
		mdp4_stat.kickoff_ov0++; 
		mb(); 
		} 
}