Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f947043b authored by Camera Software Integration's avatar Camera Software Integration Committed by Gerrit - the friendly Code Review server
Browse files

Merge "msm: camera: reqmgr: Add subdev node at the time of register" into camera-kernel.lnx.4.0

parents efaf7fac f54a60cc
Loading
Loading
Loading
Loading
+12 −58
Original line number Diff line number Diff line
@@ -656,14 +656,6 @@ int cam_register_subdev(struct cam_subdev *csd)
	}

	mutex_lock(&g_dev.dev_lock);
	if ((g_dev.subdev_nodes_created) &&
		(csd->sd_flags & V4L2_SUBDEV_FL_HAS_DEVNODE)) {
		CAM_ERR(CAM_CRM,
			"dynamic node is not allowed, name: %s, type :%d",
			csd->name, csd->ent_function);
		rc = -EINVAL;
		goto reg_fail;
	}

	sd = &csd->sd;
	v4l2_subdev_init(sd, csd->ops);
@@ -682,6 +674,18 @@ int cam_register_subdev(struct cam_subdev *csd)
		goto reg_fail;
	}

	rc = v4l2_device_register_subdev_nodes(g_dev.v4l2_dev);
	if (rc) {
		CAM_ERR(CAM_CRM, "Failed to register subdev node: %s, rc: %d",
			sd->name, rc);
		goto reg_fail;
	}

	if (sd->flags & V4L2_SUBDEV_FL_HAS_DEVNODE) {
		sd->entity.name = video_device_node_name(sd->devnode);
		CAM_DBG(CAM_CRM, "created node :%s", sd->entity.name);
	}

	g_dev.count++;

reg_fail:
@@ -706,47 +710,6 @@ int cam_unregister_subdev(struct cam_subdev *csd)
}
EXPORT_SYMBOL(cam_unregister_subdev);

static int cam_dev_mgr_create_subdev_nodes(void)
{
	int rc;
	struct v4l2_subdev *sd;

	if (!g_dev.v4l2_dev) {
		CAM_ERR(CAM_CRM, "V4L2 device not initialized");
		return -EINVAL;
	}

	if (!g_dev.state) {
		CAM_ERR(CAM_CRM, "camera root device not ready");
		return -ENODEV;
	}

	mutex_lock(&g_dev.dev_lock);
	if (g_dev.subdev_nodes_created) {
		rc = -EEXIST;
		goto create_fail;
	}

	rc = v4l2_device_register_subdev_nodes(g_dev.v4l2_dev);
	if (rc) {
		CAM_ERR(CAM_CRM, "failed to register the sub devices");
		goto create_fail;
	}

	list_for_each_entry(sd, &g_dev.v4l2_dev->subdevs, list) {
		if (!(sd->flags & V4L2_SUBDEV_FL_HAS_DEVNODE))
			continue;
		sd->entity.name = video_device_node_name(sd->devnode);
		CAM_DBG(CAM_CRM, "created node :%s", sd->entity.name);
	}

	g_dev.subdev_nodes_created = true;

create_fail:
	mutex_unlock(&g_dev.dev_lock);
	return rc;
}

static int cam_req_mgr_component_master_bind(struct device *dev)
{
	int rc = 0;
@@ -767,7 +730,6 @@ static int cam_req_mgr_component_master_bind(struct device *dev)
	g_dev.open_cnt = 0;
	mutex_init(&g_dev.cam_lock);
	spin_lock_init(&g_dev.cam_eventq_lock);
	g_dev.subdev_nodes_created = false;
	mutex_init(&g_dev.dev_lock);

	rc = cam_req_mgr_util_init();
@@ -806,13 +768,6 @@ static int cam_req_mgr_component_master_bind(struct device *dev)
		goto req_mgr_device_deinit;
	}

	rc = cam_dev_mgr_create_subdev_nodes();
	if (rc) {
		CAM_ERR(CAM_CRM, "failed in creating devices for subdevs %d",
			rc);
		goto req_mgr_device_deinit;
	}

	CAM_DBG(CAM_CRM, "All camera components bound successfully");
	rc = sysfs_create_file(&dev->kobj, &camera_debug_sysfs_attr.attr);
	if (rc < 0) {
@@ -855,7 +810,6 @@ static void cam_req_mgr_component_master_unbind(struct device *dev)
	cam_v4l2_device_cleanup();
	mutex_destroy(&g_dev.dev_lock);
	g_dev.state = false;
	g_dev.subdev_nodes_created = false;
}

static const struct component_master_ops cam_req_mgr_component_master_ops = {
+0 −2
Original line number Diff line number Diff line
@@ -12,7 +12,6 @@
 *
 * @video: pointer to struct video device.
 * @v4l2_dev: pointer to struct v4l2 device.
 * @subdev_nodes_created: all subdev nodes are created for this device
 * @count: number of subdevices registered.
 * @dev_lock: lock for the subdevice count.
 * @state: state of the root device.
@@ -24,7 +23,6 @@
struct cam_req_mgr_device {
	struct video_device *video;
	struct v4l2_device *v4l2_dev;
	bool subdev_nodes_created;
	int count;
	struct mutex dev_lock;
	bool state;