| From 5263b9d933cf34f4aac9e7adc6af0131cd2bad81 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Fri, 26 Nov 2021 00:02:57 +0100 |
| Subject: media: rcar-vin: Update format alignment constraints |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| From: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se> |
| |
| [ Upstream commit da6911f330d40cfe115a37249e47643eff555e82 ] |
| |
| This change fixes two issues with the size constraints for buffers. |
| |
| - There is no width alignment constraint for RGB formats. Prior to this |
| change they were treated as YUV and as a result were more restricted |
| than needed. Add a new check to differentiate between the two. |
| |
| - The minimum width and height supported is 5x2, not 2x4, this is an |
| artifact from the driver's soc-camera days. Fix this incorrect |
| assumption. |
| |
| Signed-off-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se> |
| Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> |
| Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/media/platform/rcar-vin/rcar-v4l2.c | 15 +++++++++++---- |
| 1 file changed, 11 insertions(+), 4 deletions(-) |
| |
| diff --git a/drivers/media/platform/rcar-vin/rcar-v4l2.c b/drivers/media/platform/rcar-vin/rcar-v4l2.c |
| index 3e7a3ae2a6b97..0bbe6f9f92062 100644 |
| --- a/drivers/media/platform/rcar-vin/rcar-v4l2.c |
| +++ b/drivers/media/platform/rcar-vin/rcar-v4l2.c |
| @@ -175,20 +175,27 @@ static void rvin_format_align(struct rvin_dev *vin, struct v4l2_pix_format *pix) |
| break; |
| } |
| |
| - /* HW limit width to a multiple of 32 (2^5) for NV12/16 else 2 (2^1) */ |
| + /* Hardware limits width alignment based on format. */ |
| switch (pix->pixelformat) { |
| + /* Multiple of 32 (2^5) for NV12/16. */ |
| case V4L2_PIX_FMT_NV12: |
| case V4L2_PIX_FMT_NV16: |
| walign = 5; |
| break; |
| - default: |
| + /* Multiple of 2 (2^1) for YUV. */ |
| + case V4L2_PIX_FMT_YUYV: |
| + case V4L2_PIX_FMT_UYVY: |
| walign = 1; |
| break; |
| + /* No multiple for RGB. */ |
| + default: |
| + walign = 0; |
| + break; |
| } |
| |
| /* Limit to VIN capabilities */ |
| - v4l_bound_align_image(&pix->width, 2, vin->info->max_width, walign, |
| - &pix->height, 4, vin->info->max_height, 2, 0); |
| + v4l_bound_align_image(&pix->width, 5, vin->info->max_width, walign, |
| + &pix->height, 2, vin->info->max_height, 0, 0); |
| |
| pix->bytesperline = rvin_format_bytesperline(vin, pix); |
| pix->sizeimage = rvin_format_sizeimage(pix); |
| -- |
| 2.34.1 |
| |