int mdp4_overlay_writeback_off(struct platform_device *pdev) { int ret; struct msm_fb_data_type *mfd = (struct msm_fb_data_type *)platform_get_drvdata(pdev); mutex_lock(&writeback_lock); if (writeback_pipe == NULL) { mutex_unlock(&writeback_lock); return 0; } if (mfd && writeback_pipe) { mdp4_writeback_dma_busy_wait(mfd); mdp4_overlay_pipe_free(writeback_pipe); mdp4_overlay_panel_mode_unset(writeback_pipe->mixer_num, MDP4_PANEL_WRITEBACK); writeback_pipe = NULL; } ret = panel_next_off(pdev); mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_ON, FALSE); outpdw(MDP_BASE + 0x100F4, 0x0); mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_OFF, FALSE); mdp_clk_ctrl(0); mutex_unlock(&writeback_lock); return ret; }
void mdp4_writeback_dma_stop(struct msm_fb_data_type *mfd) { /* mutex holded by caller */ if (mfd && writeback_pipe) { mdp4_writeback_dma_busy_wait(mfd); mdp4_overlay_writeback_update(mfd); mdp4_writeback_overlay_kickoff(mfd, writeback_pipe); } }
void mdp4_writeback_dma_stop(struct msm_fb_data_type *mfd) { if (mfd && writeback_pipe) { mdp4_writeback_dma_busy_wait(mfd); mdp4_overlay_writeback_update(mfd, NULL); mdp4_writeback_overlay_kickoff(mfd, writeback_pipe); } }
int mdp4_overlay_writeback_off(struct platform_device *pdev) { int ret; struct msm_fb_data_type *mfd = (struct msm_fb_data_type *)platform_get_drvdata(pdev); if (mfd && writeback_pipe) { mdp4_writeback_dma_busy_wait(mfd); mdp4_overlay_pipe_free(writeback_pipe); mdp4_overlay_panel_mode_unset(writeback_pipe->mixer_num, MDP4_PANEL_WRITEBACK); writeback_pipe = NULL; } ret = panel_next_off(pdev); mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_ON, FALSE); /* MDP_LAYERMIXER_WB_MUX_SEL to restore to default cfg*/ outpdw(MDP_BASE + 0x100F4, 0x0); mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_OFF, FALSE); return ret; }