summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIliya Varadzhakov <ivarad@codeaurora.org>2016-12-22 19:00:37 +0200
committerAngel Hitov <ahitov@codeaurora.org>2017-03-15 18:48:42 +0200
commitf977e44aeaf5da07338a4649caa45367461226f0 (patch)
treee3ecfc2a1b25a3cba5a7ac617f0edc2e2a2ee259
parent89bfd053bfb4afb40d86f58de52cb7b1433dccba (diff)
msm: camera: Bypass redundant creation of video node in stereo
In stereo mode two sensors use one video node so we need to bypass the creation of second one. Change-Id: I4a16d664afd3d2f67ff13cb62cd8265144d64caf Signed-off-by: Angel Hitov <ahitov@codeaurora.org> Signed-off-by: Iliya Varadzhakov <ivarad@codeaurora.org>
-rw-r--r--drivers/media/platform/msm/camera_v2/sensor/msm_sensor.h1
-rw-r--r--drivers/media/platform/msm/camera_v2/sensor/msm_sensor_driver.c30
-rw-r--r--include/media/msm_cam_sensor.h1
-rw-r--r--include/uapi/media/msm_camsensor_sdk.h3
4 files changed, 26 insertions, 9 deletions
diff --git a/drivers/media/platform/msm/camera_v2/sensor/msm_sensor.h b/drivers/media/platform/msm/camera_v2/sensor/msm_sensor.h
index 5d57ec8c28ff..8f55f453bf03 100644
--- a/drivers/media/platform/msm/camera_v2/sensor/msm_sensor.h
+++ b/drivers/media/platform/msm/camera_v2/sensor/msm_sensor.h
@@ -89,6 +89,7 @@ struct msm_sensor_ctrl_t {
uint32_t set_mclk_23880000;
uint8_t is_csid_tg_mode;
uint32_t is_secure;
+ uint8_t bypass_video_node_creation;
};
int msm_sensor_config(struct msm_sensor_ctrl_t *s_ctrl, void __user *argp);
diff --git a/drivers/media/platform/msm/camera_v2/sensor/msm_sensor_driver.c b/drivers/media/platform/msm/camera_v2/sensor/msm_sensor_driver.c
index 1dd2b0d26007..344f1a6f8d92 100644
--- a/drivers/media/platform/msm/camera_v2/sensor/msm_sensor_driver.c
+++ b/drivers/media/platform/msm/camera_v2/sensor/msm_sensor_driver.c
@@ -86,11 +86,14 @@ static int32_t msm_sensor_driver_create_i2c_v4l_subdev
struct i2c_client *client = s_ctrl->sensor_i2c_client->client;
CDBG("%s %s I2c probe succeeded\n", __func__, client->name);
- rc = camera_init_v4l2(&client->dev, &session_id);
- if (rc < 0) {
- pr_err("failed: camera_init_i2c_v4l2 rc %d", rc);
- return rc;
+ if (s_ctrl->bypass_video_node_creation == 0) {
+ rc = camera_init_v4l2(&client->dev, &session_id);
+ if (rc < 0) {
+ pr_err("failed: camera_init_i2c_v4l2 rc %d", rc);
+ return rc;
+ }
}
+
CDBG("%s rc %d session_id %d\n", __func__, rc, session_id);
snprintf(s_ctrl->msm_sd.sd.name,
sizeof(s_ctrl->msm_sd.sd.name), "%s",
@@ -123,11 +126,14 @@ static int32_t msm_sensor_driver_create_v4l_subdev
int32_t rc = 0;
uint32_t session_id = 0;
- rc = camera_init_v4l2(&s_ctrl->pdev->dev, &session_id);
- if (rc < 0) {
- pr_err("failed: camera_init_v4l2 rc %d", rc);
- return rc;
+ if (s_ctrl->bypass_video_node_creation == 0) {
+ rc = camera_init_v4l2(&s_ctrl->pdev->dev, &session_id);
+ if (rc < 0) {
+ pr_err("failed: camera_init_v4l2 rc %d", rc);
+ return rc;
+ }
}
+
CDBG("rc %d session_id %d", rc, session_id);
s_ctrl->sensordata->sensor_info->session_id = session_id;
@@ -773,6 +779,8 @@ int32_t msm_sensor_driver_probe(void *setting,
slave_info32->sensor_init_params;
slave_info->output_format =
slave_info32->output_format;
+ slave_info->bypass_video_node_creation =
+ !!slave_info32->bypass_video_node_creation;
kfree(slave_info32);
} else
#endif
@@ -800,7 +808,8 @@ int32_t msm_sensor_driver_probe(void *setting,
slave_info->sensor_init_params.position);
CDBG("mount %d",
slave_info->sensor_init_params.sensor_mount_angle);
-
+ CDBG("bypass video node creation %d",
+ slave_info->bypass_video_node_creation);
/* Validate camera id */
if (slave_info->camera_id >= MAX_CAMERAS) {
pr_err("failed: invalid camera id %d max %d",
@@ -980,6 +989,9 @@ CSID_TG:
*/
s_ctrl->is_probe_succeed = 1;
+ s_ctrl->bypass_video_node_creation =
+ slave_info->bypass_video_node_creation;
+
/*
* Create /dev/videoX node, comment for now until dummy /dev/videoX
* node is created and used by HAL
diff --git a/include/media/msm_cam_sensor.h b/include/media/msm_cam_sensor.h
index 75d0912aa459..762f1c51620c 100644
--- a/include/media/msm_cam_sensor.h
+++ b/include/media/msm_cam_sensor.h
@@ -41,6 +41,7 @@ struct msm_camera_sensor_slave_info32 {
uint8_t is_init_params_valid;
struct msm_sensor_init_params sensor_init_params;
enum msm_sensor_output_format_t output_format;
+ uint8_t bypass_video_node_creation;
};
struct msm_camera_csid_lut_params32 {
diff --git a/include/uapi/media/msm_camsensor_sdk.h b/include/uapi/media/msm_camsensor_sdk.h
index ad0825e33217..83927c614e91 100644
--- a/include/uapi/media/msm_camsensor_sdk.h
+++ b/include/uapi/media/msm_camsensor_sdk.h
@@ -48,6 +48,8 @@
#define MSM_EEPROM_MEMORY_MAP_MAX_SIZE 80
#define MSM_EEPROM_MAX_MEM_MAP_CNT 8
+#define MSM_SENSOR_BYPASS_VIDEO_NODE 1
+
enum msm_sensor_camera_id_t {
CAMERA_0,
CAMERA_1,
@@ -300,6 +302,7 @@ struct msm_camera_sensor_slave_info {
unsigned char is_init_params_valid;
struct msm_sensor_init_params sensor_init_params;
enum msm_sensor_output_format_t output_format;
+ uint8_t bypass_video_node_creation;
};
struct msm_camera_i2c_reg_array {