From 6ff867b97f89fa562ab419a4afd2076d8eaf8a13 Mon Sep 17 00:00:00 2001 From: Bryan Wu Date: Tue, 23 Apr 2013 15:26:19 -0700 Subject: media: OV5650: tweak registers and add test mode - tweak offset registers - add test mode to output color bars - use BGGR RAW format Bug 1369083 Change-Id: I61352c018f8ca099ff3d39158a67052a1e185eec Signed-off-by: Bryan Wu Reviewed-on: http://git-master/r/279983 Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: Allen Martin Reviewed-by: Matthew Pedro Tested-by: Matthew Pedro --- drivers/media/video/ov5650.c | 40 ++++++++++++++++++++++++++++++++-------- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/drivers/media/video/ov5650.c b/drivers/media/video/ov5650.c index e721065c222b..9b47d66536ef 100644 --- a/drivers/media/video/ov5650.c +++ b/drivers/media/video/ov5650.c @@ -91,6 +91,15 @@ static struct ov5650_reg *test_pattern_modes[] = { tp_checker_seq, }; +enum { + TP_NONE = 1, + TP_COLORBARS = 2, + TP_CHECKER = 3, +}; + +static int test_mode = 2; +module_param(test_mode, int, 0644); + static struct ov5650_reg reset_seq[] = { {0x3008, 0x82}, {OV5650_TABLE_WAIT_MS, 5}, @@ -218,7 +227,7 @@ static struct ov5650_reg mode_1296x972[] = { {0x3800, 0x03}, {0x3801, 0x3c}, {0x3802, 0x00}, - {0x3803, 0x06}, + {0x3803, 0x62}, {0x3804, 0x05}, {0x3805, 0x10}, {0x3806, 0x03}, @@ -454,7 +463,7 @@ static struct ov5650_reg mode_1920x1080[] = { {0x3800, 0x02}, {0x3801, 0x94}, {0x3802, 0x00}, - {0x3803, 0x0c}, + {0x3803, 0x00}, {0x3804, 0x07}, {0x3805, 0x80}, {0x3806, 0x04}, @@ -1092,7 +1101,7 @@ static void ov5650_set_default_fmt(struct ov5650_priv *priv) mf->width = ov5650_frmsizes[OV5650_MODE_2592x1944].width; mf->height = ov5650_frmsizes[OV5650_MODE_2592x1944].height; - mf->code = V4L2_MBUS_FMT_SGRBG10_1X10; + mf->code = V4L2_MBUS_FMT_SBGGR10_1X10; mf->field = V4L2_FIELD_NONE; mf->colorspace = V4L2_COLORSPACE_SRGB; } @@ -1120,6 +1129,21 @@ static int ov5650_s_stream(struct v4l2_subdev *sd, int enable) ret = ov5650_write_table(priv, mode_end, NULL, 0); if (ret) return ret; + + switch (test_mode) { + case TP_NONE: + ret = ov5650_write_table(priv, tp_none_seq, NULL, 0); + break; + case TP_COLORBARS: + ret = ov5650_write_table(priv, tp_cbars_seq, NULL, 0); + break; + case TP_CHECKER: + ret = ov5650_write_table(priv, tp_checker_seq, NULL, 0); + break; + } + if (ret) + return ret; + } else ov5650_set_default_fmt(priv); @@ -1178,9 +1202,9 @@ static int ov5650_try_fmt(struct v4l2_subdev *sd, mf->width = ov5650_frmsizes[mode].width; mf->height = ov5650_frmsizes[mode].height; - if (mf->code != V4L2_MBUS_FMT_SGRBG8_1X8 && - mf->code != V4L2_MBUS_FMT_SGRBG10_1X10) - mf->code = V4L2_MBUS_FMT_SGRBG10_1X10; + if (mf->code != V4L2_MBUS_FMT_SBGGR8_1X8 && + mf->code != V4L2_MBUS_FMT_SBGGR10_1X10) + mf->code = V4L2_MBUS_FMT_SBGGR10_1X10; mf->field = V4L2_FIELD_NONE; mf->colorspace = V4L2_COLORSPACE_SRGB; @@ -1198,10 +1222,10 @@ static int ov5650_enum_fmt(struct v4l2_subdev *sd, unsigned int index, switch (index) { case 0: - *code = V4L2_MBUS_FMT_SGRBG10_1X10; + *code = V4L2_MBUS_FMT_SBGGR10_1X10; break; case 1: - *code = V4L2_MBUS_FMT_SGRBG8_1X8; + *code = V4L2_MBUS_FMT_SBGGR8_1X8; break; } -- cgit v1.2.3