Forráskód Böngészése

media: tvp5150: fix width alignment during set_selection()

The driver ignored the width alignment which exists due to the UYVY
colorspace format. Fix the width alignment and make use of the the
provided v4l2 helper function to set the width, height and all
alignments in one.

Fixes: 963ddc63e20d ("[media] media: tvp5150: Add cropping support")

Signed-off-by: Marco Felsch <m.felsch@pengutronix.de>
Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
Marco Felsch 7 éve
szülő
commit
bd24db0410
1 módosított fájl, 9 hozzáadás és 5 törlés
  1. 9 5
      drivers/media/i2c/tvp5150.c

+ 9 - 5
drivers/media/i2c/tvp5150.c

@@ -907,9 +907,6 @@ static int tvp5150_set_selection(struct v4l2_subdev *sd,
 
 
 	/* tvp5150 has some special limits */
 	/* tvp5150 has some special limits */
 	rect.left = clamp(rect.left, 0, TVP5150_MAX_CROP_LEFT);
 	rect.left = clamp(rect.left, 0, TVP5150_MAX_CROP_LEFT);
-	rect.width = clamp_t(unsigned int, rect.width,
-			     TVP5150_H_MAX - TVP5150_MAX_CROP_LEFT - rect.left,
-			     TVP5150_H_MAX - rect.left);
 	rect.top = clamp(rect.top, 0, TVP5150_MAX_CROP_TOP);
 	rect.top = clamp(rect.top, 0, TVP5150_MAX_CROP_TOP);
 
 
 	/* Calculate height based on current standard */
 	/* Calculate height based on current standard */
@@ -923,9 +920,16 @@ static int tvp5150_set_selection(struct v4l2_subdev *sd,
 	else
 	else
 		hmax = TVP5150_V_MAX_OTHERS;
 		hmax = TVP5150_V_MAX_OTHERS;
 
 
-	rect.height = clamp_t(unsigned int, rect.height,
+	/*
+	 * alignments:
+	 *  - width = 2 due to UYVY colorspace
+	 *  - height, image = no special alignment
+	 */
+	v4l_bound_align_image(&rect.width,
+			      TVP5150_H_MAX - TVP5150_MAX_CROP_LEFT - rect.left,
+			      TVP5150_H_MAX - rect.left, 1, &rect.height,
 			      hmax - TVP5150_MAX_CROP_TOP - rect.top,
 			      hmax - TVP5150_MAX_CROP_TOP - rect.top,
-			      hmax - rect.top);
+			      hmax - rect.top, 0, 0);
 
 
 	tvp5150_write(sd, TVP5150_VERT_BLANKING_START, rect.top);
 	tvp5150_write(sd, TVP5150_VERT_BLANKING_START, rect.top);
 	tvp5150_write(sd, TVP5150_VERT_BLANKING_STOP,
 	tvp5150_write(sd, TVP5150_VERT_BLANKING_STOP,