msm: camera: Add media device node
Add media device node for each camera sensor
Sensor and video node info will be used
for device discovery from userspace
Change-Id: Id8c2f3e952c83259bb6b273cb6b3f04ed93d0ef3
Signed-off-by: Kevin Chan <ktchan@codeaurora.org>
diff --git a/drivers/media/video/msm/msm.c b/drivers/media/video/msm/msm.c
index 78c474e..a7f6a8c 100644
--- a/drivers/media/video/msm/msm.c
+++ b/drivers/media/video/msm/msm.c
@@ -2392,6 +2392,13 @@
return rc;
}
+ strlcpy(pcam->mctl.media_dev.model, QCAMERA_NAME,
+ sizeof(pcam->mctl.media_dev.model));
+ pcam->mctl.media_dev.dev = &client->dev;
+ rc = media_device_register(&pcam->mctl.media_dev);
+ pvdev->v4l2_dev = &pcam->v4l2_dev;
+ pcam->v4l2_dev.mdev = &pcam->mctl.media_dev;
+
/* init video device's driver interface */
D("sensor name = %s, sizeof(pvdev->name)=%d\n",
pcam->mctl.sensor_sdev->name, sizeof(pvdev->name));
@@ -2406,6 +2413,10 @@
pvdev->minor = -1;
pvdev->vfl_type = 1;
+ media_entity_init(&pvdev->entity, 0, NULL, 0);
+ pvdev->entity.type = MEDIA_ENT_T_DEVNODE_V4L;
+ pvdev->entity.group_id = QCAMERA_VNODE_GROUP_ID;
+
/* register v4l2 video device to kernel as /dev/videoXX */
D("video_register_device\n");
rc = video_register_device(pvdev,
@@ -2415,6 +2426,7 @@
pr_err("%s: video_register_device failed\n", __func__);
goto reg_fail;
}
+ pvdev->entity.name = video_device_node_name(pvdev);
D("%s: video device registered as /dev/video%d\n",
__func__, pvdev->num);
@@ -2600,6 +2612,15 @@
g_server_dev.mctl_node_info.mctl_node_name
[g_server_dev.mctl_node_info.num_mctl_nodes]);
+ /*Temporary solution to store info in media device structure
+ until we can expand media device structure to support more
+ device info*/
+ snprintf(pcam->mctl.media_dev.serial,
+ sizeof(pcam->mctl.media_dev.serial),
+ "%s-%d-%d", QCAMERA_NAME,
+ sdata->sensor_platform_info->mount_angle,
+ sdata->camera_type);
+
g_server_dev.camera_info.num_cameras++;
g_server_dev.mctl_node_info.num_mctl_nodes++;
diff --git a/drivers/media/video/msm/msm.h b/drivers/media/video/msm/msm.h
index c90ab44..dd65c01 100644
--- a/drivers/media/video/msm/msm.h
+++ b/drivers/media/video/msm/msm.h
@@ -218,6 +218,8 @@
/* most-frequently accessed manager object*/
struct msm_sync sync;
+ /*Media device node*/
+ struct media_device media_dev;
/* the following reflect the HW topology information*/
/*mandatory*/
diff --git a/include/media/msm_camera.h b/include/media/msm_camera.h
index 599567a..cf7157c 100644
--- a/include/media/msm_camera.h
+++ b/include/media/msm_camera.h
@@ -1258,4 +1258,8 @@
uint8_t vpe_can_use;
};
+#define QCAMERA_NAME "qcamera"
+#define QCAMERA_DEVICE_GROUP_ID 1
+#define QCAMERA_VNODE_GROUP_ID 2
+
#endif /* __LINUX_MSM_CAMERA_H */