media: i2c: adv7180: Use MEDIA_BUS_FMT_UYVY8_1X16 for CSI2 output
authorDave Stevenson <dave.stevenson@raspberrypi.com>
Thu, 21 Dec 2023 18:01:59 +0000 (18:01 +0000)
committerDom Cobley <popcornmix@gmail.com>
Mon, 19 Feb 2024 11:35:26 +0000 (11:35 +0000)
CSI2 devices are meant to use the 1Xnn formats rather than 2Xnn
such as MEDIA_BUS_FMT_UYVY8_2X8.

For devices with ADV7180_FLAG_MIPI_CSI2 set, use
MEDIA_BUS_FMT_UYVY8_1X16.

Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
drivers/media/i2c/adv7180.c

index ceff763..6288e40 100644 (file)
@@ -723,10 +723,15 @@ static int adv7180_enum_mbus_code(struct v4l2_subdev *sd,
                                  struct v4l2_subdev_state *sd_state,
                                  struct v4l2_subdev_mbus_code_enum *code)
 {
+       struct adv7180_state *state = to_state(sd);
+
        if (code->index != 0)
                return -EINVAL;
 
-       code->code = MEDIA_BUS_FMT_UYVY8_2X8;
+       if (state->chip_info->flags & ADV7180_FLAG_MIPI_CSI2)
+               code->code = MEDIA_BUS_FMT_UYVY8_1X16;
+       else
+               code->code = MEDIA_BUS_FMT_UYVY8_2X8;
 
        return 0;
 }
@@ -736,7 +741,10 @@ static int adv7180_mbus_fmt(struct v4l2_subdev *sd,
 {
        struct adv7180_state *state = to_state(sd);
 
-       fmt->code = MEDIA_BUS_FMT_UYVY8_2X8;
+       if (state->chip_info->flags & ADV7180_FLAG_MIPI_CSI2)
+               fmt->code = MEDIA_BUS_FMT_UYVY8_1X16;
+       else
+               fmt->code = MEDIA_BUS_FMT_UYVY8_2X8;
        fmt->colorspace = V4L2_COLORSPACE_SMPTE170M;
        fmt->width = 720;
        fmt->height = state->curr_norm & V4L2_STD_525_60 ? 480 : 576;