From 34bed428fea0d0da58a22365588f7511b491a497 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 {
