media: imx-csi: Move crop/compose reset after filling default mbus fields
authorSteve Longerbeam <slongerbeam@gmail.com>
Wed, 9 Jan 2019 18:30:12 +0000 (13:30 -0500)
committerMauro Carvalho Chehab <mchehab+samsung@kernel.org>
Wed, 16 Jan 2019 19:15:39 +0000 (14:15 -0500)
If caller passes un-initialized field type V4L2_FIELD_ANY to CSI
sink pad, the reset CSI crop window would not be correct, because
the crop window depends on a valid input field type. To fix move
the reset of crop and compose windows to after the call to
imx_media_fill_default_mbus_fields().

Signed-off-by: Steve Longerbeam <slongerbeam@gmail.com>
Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
drivers/staging/media/imx/imx-media-csi.c

index 6f1e11b8a7cb06f55d33414965223e068a978fe6..8537ecb7dd174805ad71fdd0082bcb6c52239a6c 100644 (file)
@@ -1409,19 +1409,6 @@ static void csi_try_fmt(struct csi_priv *priv,
                                      W_ALIGN, &sdformat->format.height,
                                      MIN_H, MAX_H, H_ALIGN, S_ALIGN);
 
-               /* Reset crop and compose rectangles */
-               crop->left = 0;
-               crop->top = 0;
-               crop->width = sdformat->format.width;
-               crop->height = sdformat->format.height;
-               if (sdformat->format.field == V4L2_FIELD_ALTERNATE)
-                       crop->height *= 2;
-               csi_try_crop(priv, crop, cfg, &sdformat->format, upstream_ep);
-               compose->left = 0;
-               compose->top = 0;
-               compose->width = crop->width;
-               compose->height = crop->height;
-
                *cc = imx_media_find_mbus_format(sdformat->format.code,
                                                 CS_SEL_ANY, true);
                if (!*cc) {
@@ -1437,6 +1424,20 @@ static void csi_try_fmt(struct csi_priv *priv,
                imx_media_fill_default_mbus_fields(
                        &sdformat->format, infmt,
                        priv->active_output_pad == CSI_SRC_PAD_DIRECT);
+
+               /* Reset crop and compose rectangles */
+               crop->left = 0;
+               crop->top = 0;
+               crop->width = sdformat->format.width;
+               crop->height = sdformat->format.height;
+               if (sdformat->format.field == V4L2_FIELD_ALTERNATE)
+                       crop->height *= 2;
+               csi_try_crop(priv, crop, cfg, &sdformat->format, upstream_ep);
+               compose->left = 0;
+               compose->top = 0;
+               compose->width = crop->width;
+               compose->height = crop->height;
+
                break;
        }
 }