diff options
Diffstat (limited to 'target/linux/bcm27xx/patches-5.4/950-0677-media-i2c-ov5647-Add-support-for-g_selection-to-refl.patch')
-rw-r--r-- | target/linux/bcm27xx/patches-5.4/950-0677-media-i2c-ov5647-Add-support-for-g_selection-to-refl.patch | 206 |
1 files changed, 0 insertions, 206 deletions
diff --git a/target/linux/bcm27xx/patches-5.4/950-0677-media-i2c-ov5647-Add-support-for-g_selection-to-refl.patch b/target/linux/bcm27xx/patches-5.4/950-0677-media-i2c-ov5647-Add-support-for-g_selection-to-refl.patch deleted file mode 100644 index 66715a108e..0000000000 --- a/target/linux/bcm27xx/patches-5.4/950-0677-media-i2c-ov5647-Add-support-for-g_selection-to-refl.patch +++ /dev/null @@ -1,206 +0,0 @@ -From 940cac315aaeca33483bffcf09a235195e3f5272 Mon Sep 17 00:00:00 2001 -From: Dave Stevenson <dave.stevenson@raspberrypi.com> -Date: Wed, 29 Apr 2020 11:46:07 +0100 -Subject: [PATCH] media: i2c: ov5647: Add support for g_selection to - reflect cropping/binning - -In order to apply lens shading correctly the client needs to know how -each mode crops or scales the image compared to the full sensor array. -Implement this (based on the imx219 equivalent). - -Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com> ---- - drivers/media/i2c/ov5647.c | 119 ++++++++++++++++++++++++++++++------- - 1 file changed, 96 insertions(+), 23 deletions(-) - ---- a/drivers/media/i2c/ov5647.c -+++ b/drivers/media/i2c/ov5647.c -@@ -70,25 +70,14 @@ - #define VAL_TERM 0xfe - #define REG_DLY 0xffff - --#define OV5647_ROW_START 0x01 --#define OV5647_ROW_START_MIN 0 --#define OV5647_ROW_START_MAX 2004 --#define OV5647_ROW_START_DEF 54 -- --#define OV5647_COLUMN_START 0x02 --#define OV5647_COLUMN_START_MIN 0 --#define OV5647_COLUMN_START_MAX 2750 --#define OV5647_COLUMN_START_DEF 16 -- --#define OV5647_WINDOW_HEIGHT 0x03 --#define OV5647_WINDOW_HEIGHT_MIN 2 --#define OV5647_WINDOW_HEIGHT_MAX 2006 --#define OV5647_WINDOW_HEIGHT_DEF 1944 -- --#define OV5647_WINDOW_WIDTH 0x04 --#define OV5647_WINDOW_WIDTH_MIN 2 --#define OV5647_WINDOW_WIDTH_MAX 2752 --#define OV5647_WINDOW_WIDTH_DEF 2592 -+/* OV5647 native and active pixel array size */ -+#define OV5647_NATIVE_WIDTH 2624U -+#define OV5647_NATIVE_HEIGHT 1956U -+ -+#define OV5647_PIXEL_ARRAY_LEFT 16U -+#define OV5647_PIXEL_ARRAY_TOP 16U -+#define OV5647_PIXEL_ARRAY_WIDTH 2592U -+#define OV5647_PIXEL_ARRAY_HEIGHT 1944U - - struct regval_list { - u16 addr; -@@ -97,6 +86,9 @@ struct regval_list { - - struct ov5647_mode { - struct v4l2_mbus_framefmt format; -+ /* Analog crop rectangle. */ -+ struct v4l2_rect crop; -+ - struct regval_list *reg_list; - unsigned int num_regs; - }; -@@ -603,6 +595,12 @@ static struct ov5647_mode supported_mode - .width = 640, - .height = 480 - }, -+ .crop = { -+ .left = 0, -+ .top = 0, -+ .width = 1280, -+ .height = 960, -+ }, - ov5647_640x480_8bit, - ARRAY_SIZE(ov5647_640x480_8bit) - }, -@@ -620,6 +618,12 @@ static struct ov5647_mode supported_mode - .width = 2592, - .height = 1944 - }, -+ .crop = { -+ .left = 0, -+ .top = 0, -+ .width = 2592, -+ .height = 1944 -+ }, - ov5647_2592x1944_10bit, - ARRAY_SIZE(ov5647_2592x1944_10bit) - }, -@@ -635,6 +639,12 @@ static struct ov5647_mode supported_mode - .width = 1920, - .height = 1080 - }, -+ .crop = { -+ .left = 348, -+ .top = 434, -+ .width = 1928, -+ .height = 1080, -+ }, - ov5647_1080p30_10bit, - ARRAY_SIZE(ov5647_1080p30_10bit) - }, -@@ -649,6 +659,12 @@ static struct ov5647_mode supported_mode - .width = 1296, - .height = 972 - }, -+ .crop = { -+ .left = 0, -+ .top = 0, -+ .width = 2592, -+ .height = 1944, -+ }, - ov5647_2x2binned_10bit, - ARRAY_SIZE(ov5647_2x2binned_10bit) - }, -@@ -664,6 +680,12 @@ static struct ov5647_mode supported_mode - .width = 640, - .height = 480 - }, -+ .crop = { -+ .left = 16, -+ .top = 0, -+ .width = 2560, -+ .height = 1920, -+ }, - ov5647_640x480_10bit, - ARRAY_SIZE(ov5647_640x480_10bit) - }, -@@ -971,6 +993,56 @@ static const struct v4l2_subdev_core_ops - #endif - }; - -+static const struct v4l2_rect * -+__ov5647_get_pad_crop(struct ov5647 *ov5647, struct v4l2_subdev_pad_config *cfg, -+ unsigned int pad, enum v4l2_subdev_format_whence which) -+{ -+ switch (which) { -+ case V4L2_SUBDEV_FORMAT_TRY: -+ return v4l2_subdev_get_try_crop(&ov5647->sd, cfg, pad); -+ case V4L2_SUBDEV_FORMAT_ACTIVE: -+ return &ov5647->mode->crop; -+ } -+ -+ return NULL; -+} -+ -+static int ov5647_get_selection(struct v4l2_subdev *sd, -+ struct v4l2_subdev_pad_config *cfg, -+ struct v4l2_subdev_selection *sel) -+{ -+ switch (sel->target) { -+ case V4L2_SEL_TGT_CROP: { -+ struct ov5647 *state = to_state(sd); -+ -+ mutex_lock(&state->lock); -+ sel->r = *__ov5647_get_pad_crop(state, cfg, sel->pad, -+ sel->which); -+ mutex_unlock(&state->lock); -+ -+ return 0; -+ } -+ -+ case V4L2_SEL_TGT_NATIVE_SIZE: -+ sel->r.top = 0; -+ sel->r.left = 0; -+ sel->r.width = OV5647_NATIVE_WIDTH; -+ sel->r.height = OV5647_NATIVE_HEIGHT; -+ -+ return 0; -+ -+ case V4L2_SEL_TGT_CROP_DEFAULT: -+ sel->r.top = OV5647_PIXEL_ARRAY_TOP; -+ sel->r.left = OV5647_PIXEL_ARRAY_LEFT; -+ sel->r.width = OV5647_PIXEL_ARRAY_WIDTH; -+ sel->r.height = OV5647_PIXEL_ARRAY_HEIGHT; -+ -+ return 0; -+ } -+ -+ return -EINVAL; -+} -+ - static int ov5647_s_stream(struct v4l2_subdev *sd, int enable) - { - struct ov5647 *state = to_state(sd); -@@ -1122,6 +1194,7 @@ static const struct v4l2_subdev_pad_ops - .enum_mbus_code = ov5647_enum_mbus_code, - .set_fmt = ov5647_set_fmt, - .get_fmt = ov5647_get_fmt, -+ .get_selection = ov5647_get_selection, - .enum_frame_size = ov5647_enum_frame_size, - }; - -@@ -1170,10 +1243,10 @@ static int ov5647_open(struct v4l2_subde - v4l2_subdev_get_try_crop(sd, fh->pad, 0); - struct ov5647 *state = to_state(sd); - -- crop->left = OV5647_COLUMN_START_DEF; -- crop->top = OV5647_ROW_START_DEF; -- crop->width = OV5647_WINDOW_WIDTH_DEF; -- crop->height = OV5647_WINDOW_HEIGHT_DEF; -+ crop->left = OV5647_PIXEL_ARRAY_LEFT; -+ crop->top = OV5647_PIXEL_ARRAY_TOP; -+ crop->width = OV5647_PIXEL_ARRAY_WIDTH; -+ crop->height = OV5647_PIXEL_ARRAY_HEIGHT; - - /* Set the default format to the same as the sensor. */ - *format = state->mode->format; |