int mdp4_mddi_on(struct platform_device *pdev) { int ret = 0; int cndx = 0; struct msm_fb_data_type *mfd; struct vsycn_ctrl *vctrl; pr_debug("%s+:\n", __func__); mfd = (struct msm_fb_data_type *)platform_get_drvdata(pdev); vctrl = &vsync_ctrl_db[cndx]; vctrl->mfd = mfd; vctrl->dev = mfd->fbi->dev; mdp_clk_ctrl(1); mdp4_overlay_update_mddi(mfd); mdp_clk_ctrl(0); mdp4_iommu_attach(); atomic_set(&vctrl->suspend, 0); pr_debug("%s-:\n", __func__); return ret; }
void mdp4_mddi_vsync_ctrl(struct fb_info *info, int enable) { struct msm_fb_data_type *mfd = (struct msm_fb_data_type *)info->par; struct vsycn_ctrl *vctrl; unsigned long flags; int clk_set_on = 0; int cndx = 0; vctrl = &vsync_ctrl_db[cndx]; pr_debug("%s: clk_enabled=%d vsycn_enabeld=%d req=%d\n", __func__, vctrl->clk_enabled, vctrl->vsync_enabled, enable); mutex_lock(&vctrl->update_lock); if (vctrl->vsync_enabled == enable) { mutex_unlock(&vctrl->update_lock); return; } vctrl->vsync_enabled = enable; if (enable) { if (vctrl->clk_enabled == 0) { pr_debug("%s: SET_CLK_ON\n", __func__); mdp_clk_ctrl(1); vctrl->clk_enabled = 1; clk_set_on = 1; } spin_lock_irqsave(&vctrl->spin_lock, flags); vctrl->clk_control = 0; vctrl->expire_tick = 0; vctrl->uevent = 1; vctrl->new_update = 1; if (clk_set_on) { vsync_irq_enable(INTR_PRIMARY_RDPTR, MDP_PRIM_RDPTR_TERM); } spin_unlock_irqrestore(&vctrl->spin_lock, flags); mdp4_overlay_update_mddi(mfd); } else { spin_lock_irqsave(&vctrl->spin_lock, flags); vctrl->clk_control = 1; vctrl->uevent = 0; if (vctrl->clk_enabled) vctrl->expire_tick = VSYNC_EXPIRE_TICK; spin_unlock_irqrestore(&vctrl->spin_lock, flags); } mutex_unlock(&vctrl->update_lock); }
int mdp4_mddi_on(struct platform_device *pdev) { int ret = 0; int cndx = 0; struct msm_fb_data_type *mfd; struct vsycn_ctrl *vctrl; pr_info("%s+:\n", __func__); mfd = (struct msm_fb_data_type *)platform_get_drvdata(pdev); vctrl = &vsync_ctrl_db[cndx]; vctrl->mfd = mfd; vctrl->dev = mfd->fbi->dev; mdp_clk_ctrl(1); mdp4_overlay_update_mddi(mfd); mdp_clk_ctrl(0); mdp4_iommu_attach(); atomic_set(&vctrl->suspend, 0); pr_info("%s-:\n", __func__); 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; } return ret; }