void mdp4_dtv_overlay(struct msm_fb_data_type *mfd) { struct mdp4_overlay_pipe *pipe; if (!mfd->panel_power_on) return; if (!dtv_pipe) { pr_debug("%s: no mixer1 base layer pipe allocated!\n", __func__); return; } mutex_lock(&mfd->dma->ov_mutex); if (dtv_pipe == NULL) { if (mdp4_overlay_dtv_set(mfd, NULL)) { pr_warn("%s: dtv_pipe == NULL\n", __func__); mutex_unlock(&mfd->dma->ov_mutex); return; } } pipe = dtv_pipe; if (pipe->pipe_type == OVERLAY_TYPE_RGB) { pipe->srcp0_addr = (uint32) mfd->ibuf.buf; mdp4_overlay_rgb_setup(pipe); } mdp4_mixer_stage_up(pipe); mdp4_overlay_reg_flush(pipe, 0); mdp4_overlay_dtv_start(); mdp4_overlay_dtv_ov_done_push(mfd, pipe); mdp4_iommu_unmap(pipe); mutex_unlock(&mfd->dma->ov_mutex); }
void mdp4_dtv_overlay(struct msm_fb_data_type *mfd) { int cndx = 0; struct vsycn_ctrl *vctrl; struct mdp4_overlay_pipe *pipe; if (!mfd->panel_power_on) return; vctrl = &vsync_ctrl_db[cndx]; if (vctrl->base_pipe == NULL) mdp4_overlay_dtv_set(mfd, NULL); pipe = vctrl->base_pipe; if (pipe == NULL) { pr_warn("%s: dtv_pipe == NULL\n", __func__); return; } if (hdmi_prim_display && (pipe->pipe_used == 0 || pipe->mixer_stage != MDP4_MIXER_STAGE_BASE)) { pr_err("%s: NOT baselayer\n", __func__); mutex_unlock(&mfd->dma->ov_mutex); return; } if (pipe->pipe_type == OVERLAY_TYPE_RGB) { pipe->srcp0_addr = (uint32)mfd->ibuf.buf; mdp4_dtv_pipe_queue(0, pipe); } mdp4_dtv_pipe_commit(); }
int mdp4_dtv_on(struct platform_device *pdev) { struct msm_fb_data_type *mfd; int ret = 0; mfd = (struct msm_fb_data_type *)platform_get_drvdata(pdev); if (!mfd) return -ENODEV; if (mfd->key != MFD_KEY) return -EINVAL; mdp_footswitch_ctrl(TRUE); mdp4_overlay_panel_mode(MDP4_MIXER1, MDP4_PANEL_DTV); /* Allocate dtv_pipe at dtv_on*/ if (dtv_pipe == NULL) { if (mdp4_overlay_dtv_set(mfd, NULL)) { pr_warn("%s: dtv_pipe is NULL, dtv_set failed\n", __func__); return -EINVAL; } } ret = panel_next_on(pdev); if (ret != 0) dev_warn(&pdev->dev, "mdp4_overlay_dtv: panel_next_on failed"); dev_info(&pdev->dev, "mdp4_overlay_dtv: on"); return ret; }
int mdp4_dtv_on(struct platform_device *pdev) { struct msm_fb_data_type *mfd; int ret = 0; int cndx = 0; struct vsycn_ctrl *vctrl; vctrl = &vsync_ctrl_db[cndx]; mfd = (struct msm_fb_data_type *)platform_get_drvdata(pdev); if (!mfd) return -ENODEV; if (mfd->key != MFD_KEY) return -EINVAL; vctrl->dev = mfd->fbi->dev; #if 0 mdp_footswitch_ctrl(TRUE); #endif mdp_clk_ctrl(1); mdp4_overlay_panel_mode(MDP4_MIXER1, MDP4_PANEL_DTV); if (vctrl->base_pipe == NULL) { if (mdp4_overlay_dtv_set(mfd, NULL)) { pr_warn("%s: dtv_pipe is NULL, dtv_set failed\n", __func__); return -EINVAL; } } ret = panel_next_on(pdev); if (ret != 0) pr_warn("%s: panel_next_on failed", __func__); atomic_set(&vctrl->suspend, 0); if (!vctrl->sysfs_created) { ret = sysfs_create_group(&vctrl->dev->kobj, &vsync_fs_attr_group); if (ret) { pr_err("%s: sysfs group creation failed, ret=%d\n", __func__, ret); return ret; } kobject_uevent(&vctrl->dev->kobj, KOBJ_ADD); pr_debug("%s: kobject_uevent(KOBJ_ADD)\n", __func__); vctrl->sysfs_created = 1; } pr_info("%s:\n", __func__); return ret; }
int mdp4_dtv_on(struct platform_device *pdev) { struct msm_fb_data_type *mfd; int ret = 0; int cndx = 0; struct vsycn_ctrl *vctrl; vctrl = &vsync_ctrl_db[cndx]; mfd = (struct msm_fb_data_type *)platform_get_drvdata(pdev); if (!mfd) return -ENODEV; if (mfd->key != MFD_KEY) return -EINVAL; mutex_lock(&mfd->dma->ov_mutex); vctrl->dev = mfd->fbi->dev; vctrl->vsync_irq_enabled = 0; #if defined(CONFIG_VIDEO_MHL_V2) if (!hdmi_msm_state->hpd_on_offline) { pr_info("hdmi_online is not\n"); mutex_unlock(&mfd->dma->ov_mutex); return -ENODEV; } #endif mdp_footswitch_ctrl(TRUE); /* Mdp clock enable */ mdp_clk_ctrl(1); mdp4_overlay_panel_mode(MDP4_MIXER1, MDP4_PANEL_DTV); /* Allocate dtv_pipe at dtv_on*/ if (vctrl->base_pipe == NULL) { if (mdp4_overlay_dtv_set(mfd, NULL)) { pr_warn("%s: dtv_pipe is NULL, dtv_set failed\n", __func__); mutex_unlock(&mfd->dma->ov_mutex); return -EINVAL; } } ret = panel_next_on(pdev); if (ret != 0) pr_warn("%s: panel_next_on failed", __func__); atomic_set(&vctrl->suspend, 0); mutex_unlock(&mfd->dma->ov_mutex); pr_info("%s:\n", __func__); return ret; }
int mdp4_dtv_on(struct platform_device *pdev) { struct msm_fb_data_type *mfd; int ret = 0; int cndx = 0; struct vsycn_ctrl *vctrl; vctrl = &vsync_ctrl_db[cndx]; mfd = (struct msm_fb_data_type *)platform_get_drvdata(pdev); if (!mfd) return -ENODEV; if (mfd->key != MFD_KEY) return -EINVAL; vctrl->dev = mfd->fbi->dev; #if 0 mdp_footswitch_ctrl(TRUE); #endif /* Mdp clock enable */ mdp_clk_ctrl(1); mdp4_overlay_panel_mode(MDP4_MIXER1, MDP4_PANEL_DTV); /* Allocate dtv_pipe at dtv_on*/ if (vctrl->base_pipe == NULL) { if (mdp4_overlay_dtv_set(mfd, NULL)) { pr_warn("%s: dtv_pipe is NULL, dtv_set failed\n", __func__); return -EINVAL; } } ret = panel_next_on(pdev); if (ret != 0) pr_warn("%s: panel_next_on failed", __func__); atomic_set(&vctrl->suspend, 0); pr_info("%s:\n", __func__); return ret; }