diff options
Diffstat (limited to 'target/linux/bcm27xx/patches-5.10/950-0491-media-i2c-imx477-Remove-internal-v4l2_mbus_framefmt-.patch')
-rw-r--r-- | target/linux/bcm27xx/patches-5.10/950-0491-media-i2c-imx477-Remove-internal-v4l2_mbus_framefmt-.patch | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/target/linux/bcm27xx/patches-5.10/950-0491-media-i2c-imx477-Remove-internal-v4l2_mbus_framefmt-.patch b/target/linux/bcm27xx/patches-5.10/950-0491-media-i2c-imx477-Remove-internal-v4l2_mbus_framefmt-.patch new file mode 100644 index 0000000000..5e15d6b4a3 --- /dev/null +++ b/target/linux/bcm27xx/patches-5.10/950-0491-media-i2c-imx477-Remove-internal-v4l2_mbus_framefmt-.patch @@ -0,0 +1,70 @@ +From 013bd52fb83d145e90b8678c004ae1b32854d7f7 Mon Sep 17 00:00:00 2001 +From: Naushir Patuck <naush@raspberrypi.com> +Date: Fri, 19 Feb 2021 10:30:49 +0000 +Subject: [PATCH] media: i2c: imx477: Remove internal + v4l2_mbus_framefmt from the state + +The only field in this struct that is used is the format code, so +replace the struct with this single field. + +Save the format code in imx477_set_pad_format() when setting up a new +mode so that imx477_get_pad_format() performs the right lookup. +Otherwise, this caused a bug where the mode lookup occurred on the +12-bit table rather than the 10-bit table. + +Signed-off-by: Naushir Patuck <naush@raspberrypi.com> +--- + drivers/media/i2c/imx477.c | 19 ++++--------------- + 1 file changed, 4 insertions(+), 15 deletions(-) + +--- a/drivers/media/i2c/imx477.c ++++ b/drivers/media/i2c/imx477.c +@@ -1073,7 +1073,7 @@ struct imx477 { + struct v4l2_subdev sd; + struct media_pad pad[NUM_PADS]; + +- struct v4l2_mbus_framefmt fmt; ++ unsigned int fmt_code; + + struct clk *xclk; + u32 xclk_freq; +@@ -1235,21 +1235,9 @@ static u32 imx477_get_format_code(struct + + static void imx477_set_default_format(struct imx477 *imx477) + { +- struct v4l2_mbus_framefmt *fmt = &imx477->fmt; +- + /* Set default mode to max resolution */ + imx477->mode = &supported_modes_12bit[0]; +- +- fmt->code = MEDIA_BUS_FMT_SRGGB12_1X12; +- fmt->colorspace = V4L2_COLORSPACE_SRGB; +- fmt->ycbcr_enc = V4L2_MAP_YCBCR_ENC_DEFAULT(fmt->colorspace); +- fmt->quantization = V4L2_MAP_QUANTIZATION_DEFAULT(true, +- fmt->colorspace, +- fmt->ycbcr_enc); +- fmt->xfer_func = V4L2_MAP_XFER_FUNC_DEFAULT(fmt->colorspace); +- fmt->width = imx477->mode->width; +- fmt->height = imx477->mode->height; +- fmt->field = V4L2_FIELD_NONE; ++ imx477->fmt_code = MEDIA_BUS_FMT_SRGGB12_1X12; + } + + static int imx477_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh) +@@ -1520,7 +1508,7 @@ static int imx477_get_pad_format(struct + imx477_update_image_pad_format(imx477, imx477->mode, + fmt); + fmt->format.code = +- imx477_get_format_code(imx477, imx477->fmt.code); ++ imx477_get_format_code(imx477, imx477->fmt_code); + } else { + imx477_update_metadata_pad_format(fmt); + } +@@ -1611,6 +1599,7 @@ static int imx477_set_pad_format(struct + *framefmt = fmt->format; + } else { + imx477->mode = mode; ++ imx477->fmt_code = fmt->format.code; + imx477_set_framing_limits(imx477); + } + } else { |