int mdp4_dtv_off(struct platform_device *pdev) { struct msm_fb_data_type *mfd; int ret = 0; mfd = (struct msm_fb_data_type *)platform_get_drvdata(pdev); if (dtv_pipe != NULL) { mdp4_mixer_stage_down(dtv_pipe); /* * wait4vsync to make sure pipes are * dis-engaged from mixer1 * before turn off timing generator */ mdp4_overlay_dtv_wait4vsync(); mdp4_dtv_stop(mfd); mdp4_overlay_pipe_free(dtv_pipe); mdp4_iommu_unmap(dtv_pipe); dtv_pipe = NULL; msleep(20); } mdp4_overlay_panel_mode_unset(MDP4_MIXER1, MDP4_PANEL_DTV); ret = panel_next_off(pdev); mdp_footswitch_ctrl(FALSE); dev_info(&pdev->dev, "mdp4_overlay_dtv: off"); return ret; }
void mdp4_overlay_dtv_vsync_push(struct msm_fb_data_type *mfd, struct mdp4_overlay_pipe *pipe) { mdp4_overlay_reg_flush(pipe, 1); if (pipe->flags & MDP_OV_PLAY_NOWAIT) return; mdp4_overlay_dtv_wait4vsync(mfd); }
void mdp4_overlay_dtv_vsync_push(struct msm_fb_data_type *mfd, struct mdp4_overlay_pipe *pipe) { mdp4_overlay_reg_flush(pipe, 1); if (pipe->flags & MDP_OV_PLAY_NOWAIT) return; mdp4_overlay_dtv_wait4vsync(mfd); /* change mdp clk while mdp is idle` */ mdp4_set_perf_level(); }
void mdp4_overlay_dtv_vsync_push(struct msm_fb_data_type *mfd, struct mdp4_overlay_pipe *pipe) { u32 data = inpdw(MDP_BASE + DTV_BASE); mdp4_overlay_reg_flush(pipe, 1); if (pipe->flags & MDP_OV_PLAY_NOWAIT) return; /* Return if DTV is not enabled */ if (!(data & 0x1)) return; mdp4_overlay_dtv_wait4vsync(mfd); }