aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/bcm27xx/patches-5.10/950-0405-media-i2c-imx477-Selection-compliance-fixes.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/bcm27xx/patches-5.10/950-0405-media-i2c-imx477-Selection-compliance-fixes.patch')
-rw-r--r--target/linux/bcm27xx/patches-5.10/950-0405-media-i2c-imx477-Selection-compliance-fixes.patch80
1 files changed, 80 insertions, 0 deletions
diff --git a/target/linux/bcm27xx/patches-5.10/950-0405-media-i2c-imx477-Selection-compliance-fixes.patch b/target/linux/bcm27xx/patches-5.10/950-0405-media-i2c-imx477-Selection-compliance-fixes.patch
new file mode 100644
index 0000000000..1a206b5214
--- /dev/null
+++ b/target/linux/bcm27xx/patches-5.10/950-0405-media-i2c-imx477-Selection-compliance-fixes.patch
@@ -0,0 +1,80 @@
+From cdbecdb538b1854fd61213c490da8b2ded81b5d8 Mon Sep 17 00:00:00 2001
+From: Naushir Patuck <naush@raspberrypi.com>
+Date: Wed, 9 Dec 2020 11:30:12 +0000
+Subject: [PATCH] media: i2c: imx477: Selection compliance fixes
+
+To comply with the intended usage of the V4L2 selection target when
+used to retrieve a sensor image properties, adjust the rectangles
+returned by the imx477 driver.
+
+The top/left crop coordinates of the TGT_CROP rectangle were set to
+(0, 0) instead of (8, 16) which is the offset from the larger physical
+pixel array rectangle. This was also a mismatch with the default values
+crop rectangle value, so this is corrected. Found with v4l2-compliance.
+
+While at it, add V4L2_SEL_TGT_CROP_BOUNDS support: CROP_DEFAULT and
+CROP_BOUNDS have the same size as the non-active pixels are not readable
+using the selection API. Found with v4l2-compliance.
+
+This commit mirrors 543790f777ba1b3264c168c653db6d415e7c983f done for
+the imx219 sensor.
+
+Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
+---
+ drivers/media/i2c/imx477.c | 17 +++++++++--------
+ 1 file changed, 9 insertions(+), 8 deletions(-)
+
+--- a/drivers/media/i2c/imx477.c
++++ b/drivers/media/i2c/imx477.c
+@@ -900,8 +900,8 @@ static const struct imx477_mode supporte
+ .height = 3040,
+ .line_length_pix = 0x5dc0,
+ .crop = {
+- .left = 0,
+- .top = 0,
++ .left = IMX477_PIXEL_ARRAY_LEFT,
++ .top = IMX477_PIXEL_ARRAY_TOP,
+ .width = 4056,
+ .height = 3040,
+ },
+@@ -924,8 +924,8 @@ static const struct imx477_mode supporte
+ .height = 1520,
+ .line_length_pix = 0x31c4,
+ .crop = {
+- .left = 0,
+- .top = 0,
++ .left = IMX477_PIXEL_ARRAY_LEFT,
++ .top = IMX477_PIXEL_ARRAY_TOP,
+ .width = 4056,
+ .height = 3040,
+ },
+@@ -948,8 +948,8 @@ static const struct imx477_mode supporte
+ .height = 1080,
+ .line_length_pix = 0x31c4,
+ .crop = {
+- .left = 0,
+- .top = 440,
++ .left = IMX477_PIXEL_ARRAY_LEFT,
++ .top = IMX477_PIXEL_ARRAY_TOP + 440,
+ .width = 4056,
+ .height = 2600,
+ },
+@@ -983,8 +983,8 @@ static const struct imx477_mode supporte
+ * rectangle once the driver is expanded to represent
+ * its processing blocks with multiple subdevs.
+ */
+- .left = 4,
+- .top = 0,
++ .left = IMX477_PIXEL_ARRAY_LEFT + 4,
++ .top = IMX477_PIXEL_ARRAY_TOP,
+ .width = 4052,
+ .height = 3040,
+ },
+@@ -1696,6 +1696,7 @@ static int imx477_get_selection(struct v
+ return 0;
+
+ case V4L2_SEL_TGT_CROP_DEFAULT:
++ case V4L2_SEL_TGT_CROP_BOUNDS:
+ sel->r.left = IMX477_PIXEL_ARRAY_LEFT;
+ sel->r.top = IMX477_PIXEL_ARRAY_TOP;
+ sel->r.width = IMX477_PIXEL_ARRAY_WIDTH;