media: i2c: imx477: Remove internal v4l2_mbus_framefmt from the state
authorNaushir Patuck <naush@raspberrypi.com>
Fri, 19 Feb 2021 10:30:49 +0000 (10:30 +0000)
committerDom Cobley <popcornmix@gmail.com>
Mon, 21 Mar 2022 16:04:11 +0000 (16:04 +0000)
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

index 178ddc4..74e8d89 100644 (file)
@@ -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 {