Exemplo n.º 1
0
int mdp_open(struct v4l2_subdev *sd, void *arg)
{
    struct mdp_instance *inst = kzalloc(sizeof(struct mdp_instance),
                                        GFP_KERNEL);
    void **cookie = (void **)arg;
    int rc = 0;
    struct fb_info *fbi = NULL;

    if (!inst) {
        WFD_MSG_ERR("Out of memory\n");
        return -ENOMEM;
    }

    fbi = msm_fb_get_writeback_fb();
    if (!fbi) {
        WFD_MSG_ERR("Failed to acquire mdp instance\n");
        rc = -ENODEV;
        goto exit;
    }

    msm_fb_writeback_init(fbi);
    inst->mdp = fbi;
    *cookie = inst;
    return rc;
exit:
    kfree(inst);
    return rc;
}
int mdp_open(struct v4l2_subdev *sd, void *arg)
{
	struct mdp_instance *inst = kzalloc(sizeof(struct mdp_instance),
					GFP_KERNEL);
	struct mdp_msg_ops *mops = arg;
	int rc = 0;
	struct fb_info *fbi = NULL;

	if (!inst) {
		WFD_MSG_ERR("Out of memory\n");
		rc = -ENOMEM;
		goto mdp_open_fail;
	} else if (!mops) {
		WFD_MSG_ERR("Invalid arguments\n");
		rc = -EINVAL;
		goto mdp_open_fail;
	}

	fbi = msm_fb_get_writeback_fb();
	if (!fbi) {
		WFD_MSG_ERR("Failed to acquire mdp instance\n");
		rc = -ENODEV;
		goto mdp_open_fail;
	}

	msm_fb_writeback_init(fbi);

	inst->mdp = fbi;
	inst->secure = mops->secure;
	if (mops->secure) {
		rc = mdp_secure(sd, inst);
		if (rc) {
			WFD_MSG_ERR("Couldn't secure MDP\n");
			goto mdp_secure_fail;
		}
	}


	mops->cookie = inst;
	return 0;
mdp_secure_fail:
	msm_fb_writeback_terminate(fbi);
mdp_open_fail:
	kfree(inst);
	return rc;
}
Exemplo n.º 3
0
int mdp_open(struct v4l2_subdev *sd, void *arg)
{
	struct mdp_instance *inst = kzalloc(sizeof(struct mdp_instance),
					GFP_KERNEL);
	struct mdp_msg_ops *mops = arg;
	int rc = 0;
	struct fb_info *fbi = NULL;

	if (!inst) {
		WFD_MSG_ERR("Out of memory\n");
		rc = -ENOMEM;
		goto mdp_open_fail;
	} else if (!mops) {
		WFD_MSG_ERR("Invalid arguments\n");
		rc = -EINVAL;
		goto mdp_open_fail;
	}

	fbi = msm_fb_get_writeback_fb();
	if (!fbi) {
		WFD_MSG_ERR("Failed to acquire mdp instance\n");
		rc = -ENODEV;
		goto mdp_open_fail;
	}

	/*Tell HDMI daemon to open fb2*/
	rc = kobject_uevent(&fbi->dev->kobj, KOBJ_ADD);
	if (rc) {
		WFD_MSG_ERR("Failed add to kobj");
		goto mdp_open_fail;
	}

	msm_fb_writeback_init(fbi);
	inst->mdp = fbi;
	inst->secure = mops->secure;
	inst->uses_iommu_split_domain = mops->iommu_split_domain;

	mops->cookie = inst;
	return rc;
mdp_open_fail:
	kfree(inst);
	return rc;
}
Exemplo n.º 4
0
int mdp_open(struct v4l2_subdev *sd, void *arg)
{
	struct mdp_instance *inst = kzalloc(sizeof(struct mdp_instance),
					GFP_KERNEL);
	struct mdp_msg_ops *mops = arg;
	int rc = 0;
	struct fb_info *fbi = NULL;

	if (!inst) {
		WFD_MSG_ERR("Out of memory\n");
		rc = -ENOMEM;
		goto mdp_open_fail;
	} else if (!mops) {
		WFD_MSG_ERR("Invalid arguments\n");
		rc = -EINVAL;
		goto mdp_open_fail;
	}

	fbi = msm_fb_get_writeback_fb();
	if (!fbi) {
		WFD_MSG_ERR("Failed to acquire mdp instance\n");
		rc = -ENODEV;
		goto mdp_open_fail;
	}
	inst->sdev.name = "wfd";
	/* Register wfd node to switch driver */
	rc = switch_dev_register(&inst->sdev);
	if (rc) {
		WFD_MSG_ERR("WFD switch registration failed\n");
		goto mdp_open_fail;
	}
	msm_fb_writeback_init(fbi);
	inst->mdp = fbi;
	inst->secure = mops->secure;
	inst->uses_iommu_split_domain = mops->iommu_split_domain;

	mops->cookie = inst;
	return rc;
mdp_open_fail:
	kfree(inst);
	return rc;
}
Exemplo n.º 5
0
int mdp_start(struct v4l2_subdev *sd, void *arg)
{
    struct mdp_instance *inst = arg;
    int rc = 0;
    struct fb_info *fbi = NULL;
    if (inst) {
        rc = msm_fb_writeback_start(inst->mdp);
        if (rc) {
            WFD_MSG_ERR("Failed to start MDP mode\n");
            goto exit;
        }
        fbi = msm_fb_get_writeback_fb();
        if (!fbi) {
            WFD_MSG_ERR("Failed to acquire mdp instance\n");
            rc = -ENODEV;
            goto exit;
        }
    }
exit:
    return rc;
}
Exemplo n.º 6
0
int mdp_start(struct v4l2_subdev *sd, void *arg)
{
	struct mdp_instance *inst = arg;
	int rc = 0;
	struct fb_info *fbi = NULL;
	if (inst) {
		rc = msm_fb_writeback_start(inst->mdp);
		if (rc) {
			WFD_MSG_ERR("Failed to start MDP mode\n");
			goto exit;
		}
		fbi = msm_fb_get_writeback_fb();
		if (!fbi) {
			WFD_MSG_ERR("Failed to acquire mdp instance\n");
			rc = -ENODEV;
			goto exit;
		}
		switch_set_state(&inst->sdev, true);
		WFD_MSG_DBG("wfd state switched to %d\n", inst->sdev.state);
	}
exit:
	return rc;
}
Exemplo n.º 7
0
int mdp_start(struct v4l2_subdev *sd, void *arg)
{
	struct mdp_instance *inst = arg;
	int rc = 0;
	struct fb_info *fbi = NULL;
	if (inst) {
		rc = msm_fb_writeback_start(inst->mdp);
		if (rc) {
			WFD_MSG_ERR("Failed to start MDP mode\n");
			goto exit;
		}
		fbi = msm_fb_get_writeback_fb();
		if (!fbi) {
			WFD_MSG_ERR("Failed to acquire mdp instance\n");
			rc = -ENODEV;
			goto exit;
		}
		rc = kobject_uevent(&fbi->dev->kobj, KOBJ_ONLINE);
		if (rc)
			WFD_MSG_ERR("Failed to send ONLINE event\n");
	}
exit:
	return rc;
}