From f23fd66ace0095f00a1e934eaa9fa2bb36d5c37c Mon Sep 17 00:00:00 2001 From: Naushir Patuck Date: Fri, 19 Feb 2021 10:30:49 +0000 Subject: [PATCH 348/552] 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 --- drivers/media/i2c/imx477.c | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/drivers/media/i2c/imx477.c b/drivers/media/i2c/imx477.c index 178ddc43bb73..74e8d892d4a6 100644 --- 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 imx477 *imx477, u32 code) 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 v4l2_subdev *sd, 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 v4l2_subdev *sd, *framefmt = fmt->format; } else { imx477->mode = mode; + imx477->fmt_code = fmt->format.code; imx477_set_framing_limits(imx477); } } else { -- 2.33.0