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);
}
コード例 #3
0
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;
}