From e1bf019cfa690e168404c0a8e77da506f18954eb Mon Sep 17 00:00:00 2001 From: esen chen Date: Tue, 26 Jul 2016 12:54:46 +0800 Subject: [PATCH] driver: media: tegra: add sensor mode cid Add V4L2_CID_SENSOR_MODE_ID to help sensor modes setting Using use_sensor_mode_id in dt enable PCL to set mode id Bug 200168141 Change-Id: I6d90fcbcb709e9e5d8cc8fe2bbd906005f8d4e70 Signed-off-by: esen chen Reviewed-on: http://git-master/r/1190587 Reviewed-by: Automatic_Commit_Validation_User GVS: Gerrit_Virtual_Submit Reviewed-by: Jihoon Bang --- .../platform/tegra/camera/camera_common.c | 49 ++++++++++++------- include/media/camera_common.h | 3 ++ 2 files changed, 33 insertions(+), 19 deletions(-) diff --git a/drivers/media/platform/tegra/camera/camera_common.c b/drivers/media/platform/tegra/camera/camera_common.c index a7f0e521f79..b14dc0ecd1f 100644 --- a/drivers/media/platform/tegra/camera/camera_common.c +++ b/drivers/media/platform/tegra/camera/camera_common.c @@ -428,28 +428,39 @@ int camera_common_try_fmt(struct v4l2_subdev *sd, struct v4l2_mbus_framefmt *mf) s_data->fmt_height = s_data->def_height; s_data->fmt_maxfps = s_data->def_maxfps; - for (i = 0; i < s_data->numfmts; i++) { - if (mf->width == frmfmt[i].size.width && - mf->height == frmfmt[i].size.height && - mf->maxframerate == frmfmt[i].framerates[0] && - hdr_en == frmfmt[i].hdr_en) { - s_data->mode = frmfmt[i].mode; - s_data->fmt_width = mf->width; - s_data->fmt_height = mf->height; - s_data->fmt_maxfps = mf->maxframerate; - break; + if (s_data->use_sensor_mode_id && + s_data->sensor_mode_id >= 0 && + s_data->sensor_mode_id < s_data->numfmts) { + dev_dbg(&client->dev, "%s: use_sensor_mode_id %d\n", + __func__, s_data->sensor_mode_id); + s_data->mode = frmfmt[s_data->sensor_mode_id].mode; + s_data->fmt_width = mf->width; + s_data->fmt_height = mf->height; + s_data->fmt_maxfps = mf->maxframerate; + } else { + for (i = 0; i < s_data->numfmts; i++) { + if (mf->width == frmfmt[i].size.width && + mf->height == frmfmt[i].size.height && + mf->maxframerate == frmfmt[i].framerates[0] && + hdr_en == frmfmt[i].hdr_en) { + s_data->mode = frmfmt[i].mode; + s_data->fmt_width = mf->width; + s_data->fmt_height = mf->height; + s_data->fmt_maxfps = mf->maxframerate; + break; + } } - } - if (i == s_data->numfmts) { - mf->width = s_data->fmt_width; - mf->height = s_data->fmt_height; - mf->maxframerate = s_data->fmt_maxfps; - dev_dbg(&client->dev, - "%s: invalid resolution supplied(set mode) %d %d %d\n", - __func__, mf->width, mf->height, mf->maxframerate); + if (i == s_data->numfmts) { + mf->width = s_data->fmt_width; + mf->height = s_data->fmt_height; + mf->maxframerate = s_data->fmt_maxfps; + dev_dbg(&client->dev, + "%s: invalid resolution supplied(set mode) %d %d %d\n", + __func__, mf->width, + mf->height, mf->maxframerate); + } } - if (mf->code != V4L2_MBUS_FMT_SRGGB8_1X8 && mf->code != V4L2_MBUS_FMT_SRGGB10_1X10) { mf->code = V4L2_MBUS_FMT_SRGGB10_1X10; diff --git a/include/media/camera_common.h b/include/media/camera_common.h index effb71bae09..51a051dbd9b 100644 --- a/include/media/camera_common.h +++ b/include/media/camera_common.h @@ -57,6 +57,7 @@ #define V4L2_CID_GAIN (V4L2_CID_TEGRA_CAMERA_BASE+10) #define V4L2_CID_EXPOSURE (V4L2_CID_TEGRA_CAMERA_BASE+11) #define V4L2_CID_FRAME_RATE (V4L2_CID_TEGRA_CAMERA_BASE+12) +#define V4L2_CID_SENSOR_MODE_ID (V4L2_CID_TEGRA_CAMERA_BASE+13) #define MAX_BUFFER_SIZE 32 #define MAX_CID_CONTROLS 16 @@ -202,6 +203,8 @@ struct camera_common_data { int def_mode, def_width, def_height, def_maxfps; int def_clk_freq; int fmt_width, fmt_height, fmt_maxfps; + int sensor_mode_id; + bool use_sensor_mode_id; }; struct camera_common_focuser_data; -- 2.39.2