public inbox for linux-media@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCHv3 00/12] media: omap3isp: v4l2-compliance fixes
@ 2025-12-02  7:51 Hans Verkuil
  2025-12-02  7:51 ` [PATCHv3 01/12] media: omap3isp: configure entity functions Hans Verkuil
                   ` (12 more replies)
  0 siblings, 13 replies; 16+ messages in thread
From: Hans Verkuil @ 2025-12-02  7:51 UTC (permalink / raw)
  To: linux-media; +Cc: Sakari Ailus, laurent.pinchart

When I worked on the patch series to remove the vb2 wait_prepare/finish
callbacks, I had to test that series on my Beagle xM board with a
Leopard Imaging li5m03 camera.

Since I wanted to use v4l2-compliance to test the vb2 change, I first had
to fix a bunch of other compliance problems in this driver so it would
actually be able to run the streaming tests.

This series contains the fixes I made to get to that point.

It depends on one sensor driver fix (posted separately):

https://patchwork.linuxtv.org/project/linux-media/patch/554fb9d7-374b-4868-b91b-959b8fd69b4d@kernel.org/

This series doesn't fix all compliance problems, but at least it is
a lot better now.

Regards,

        Hans

Changes since v2:
- restored the first patch ("configure entity functions") that I
  accidentally dropped in v2.

Changes since v1:
- Simplify isp_video_enum_format by checking for duplicate pixelformats
- Drop -ENOTTY to -EINVAL change in isp_video_try_format.


Hans Verkuil (12):
  media: omap3isp: configure entity functions
  media: omap3isp: add V4L2_CAP_IO_MC and don't set bus_info
  media: omap3isp: isp_video_mbus_to_pix/pix_to_mbus fixes
  media: omap3isp: implement enum_fmt_vid_cap/out
  media: omap3isp: use V4L2_COLORSPACE_SRGB instead of _JPEG
  media: omap3isp: set initial format
  media: omap3isp: rework isp_video_try/set_format
  media: omap3isp: implement create/prepare_bufs
  media: omap3isp: better VIDIOC_G/S_PARM handling
  media: omap3isp: support ctrl events for isppreview
  media: omap3isp: ispccp2: always clamp in ccp2_try_format()
  media: omap3isp: isppreview: always clamp in preview_try_format()

 drivers/media/platform/ti/omap3isp/ispccdc.c  |   1 +
 drivers/media/platform/ti/omap3isp/ispccp2.c  |   3 +-
 drivers/media/platform/ti/omap3isp/ispcsi2.c  |   1 +
 .../media/platform/ti/omap3isp/isppreview.c   |  26 ++-
 .../media/platform/ti/omap3isp/ispresizer.c   |   3 +-
 drivers/media/platform/ti/omap3isp/ispstat.c  |   1 +
 drivers/media/platform/ti/omap3isp/ispvideo.c | 178 +++++++++++++-----
 7 files changed, 152 insertions(+), 61 deletions(-)

-- 
2.51.0


^ permalink raw reply	[flat|nested] 16+ messages in thread

* [PATCHv3 01/12] media: omap3isp: configure entity functions
  2025-12-02  7:51 [PATCHv3 00/12] media: omap3isp: v4l2-compliance fixes Hans Verkuil
@ 2025-12-02  7:51 ` Hans Verkuil
  2025-12-02  7:51 ` [PATCHv3 02/12] media: omap3isp: add V4L2_CAP_IO_MC and don't set bus_info Hans Verkuil
                   ` (11 subsequent siblings)
  12 siblings, 0 replies; 16+ messages in thread
From: Hans Verkuil @ 2025-12-02  7:51 UTC (permalink / raw)
  To: linux-media; +Cc: Sakari Ailus, laurent.pinchart, Hans Verkuil

For the various subdevices, set the function field.

This fixes v4l2-compliance errors:

$ v4l2-compliance -M0
v4l2-compliance 1.33.0-5410, 32 bits, 64-bit time_t
v4l2-compliance SHA: c12c89c5bd70 2025-10-05 09:58:42

Compliance test for omap3isp device /dev/media0:

Media Driver Info:
Driver name      : omap3isp
Model            : TI OMAP3 ISP
Serial           :
Bus info         : platform:480bc000.isp
Media version    : 6.17.0
Hardware revision: 0x000000f0 (240)
Driver version   : 6.17.0

Required ioctls:
test MEDIA_IOC_DEVICE_INFO: OK
test invalid ioctls: OK

Allow for multiple opens:
test second /dev/media0 open: OK
test MEDIA_IOC_DEVICE_INFO: OK
test for unlimited opens: OK

Media Controller ioctls:
fail: v4l2-test-media.cpp(108): function == MEDIA_ENT_F_V4L2_SUBDEV_UNKNOWN
fail: v4l2-test-media.cpp(196): checkFunction(ent.function, true)
test MEDIA_IOC_G_TOPOLOGY: FAIL
fail: v4l2-test-media.cpp(398): num_data_links != num_links
test MEDIA_IOC_ENUM_ENTITIES/LINKS: FAIL
test MEDIA_IOC_SETUP_LINK: OK

Total for omap3isp device /dev/media0: 8, Succeeded: 6, Failed: 2, Warnings: 0

Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
---
 drivers/media/platform/ti/omap3isp/ispccdc.c    | 1 +
 drivers/media/platform/ti/omap3isp/ispccp2.c    | 1 +
 drivers/media/platform/ti/omap3isp/ispcsi2.c    | 1 +
 drivers/media/platform/ti/omap3isp/isppreview.c | 1 +
 drivers/media/platform/ti/omap3isp/ispresizer.c | 1 +
 drivers/media/platform/ti/omap3isp/ispstat.c    | 1 +
 6 files changed, 6 insertions(+)

diff --git a/drivers/media/platform/ti/omap3isp/ispccdc.c b/drivers/media/platform/ti/omap3isp/ispccdc.c
index 55ee14e8b449..9dbf06ac058d 100644
--- a/drivers/media/platform/ti/omap3isp/ispccdc.c
+++ b/drivers/media/platform/ti/omap3isp/ispccdc.c
@@ -2675,6 +2675,7 @@ static int ccdc_init_entities(struct isp_ccdc_device *ccdc)
 	pads[CCDC_PAD_SOURCE_OF].flags = MEDIA_PAD_FL_SOURCE;
 
 	me->ops = &ccdc_media_ops;
+	me->function = MEDIA_ENT_F_PROC_VIDEO_PIXEL_ENC_CONV;
 	ret = media_entity_pads_init(me, CCDC_PADS_NUM, pads);
 	if (ret < 0)
 		return ret;
diff --git a/drivers/media/platform/ti/omap3isp/ispccp2.c b/drivers/media/platform/ti/omap3isp/ispccp2.c
index 1204ee221c9e..f4147c79639c 100644
--- a/drivers/media/platform/ti/omap3isp/ispccp2.c
+++ b/drivers/media/platform/ti/omap3isp/ispccp2.c
@@ -1086,6 +1086,7 @@ static int ccp2_init_entities(struct isp_ccp2_device *ccp2)
 	pads[CCP2_PAD_SOURCE].flags = MEDIA_PAD_FL_SOURCE;
 
 	me->ops = &ccp2_media_ops;
+	me->function = MEDIA_ENT_F_VID_IF_BRIDGE;
 	ret = media_entity_pads_init(me, CCP2_PADS_NUM, pads);
 	if (ret < 0)
 		return ret;
diff --git a/drivers/media/platform/ti/omap3isp/ispcsi2.c b/drivers/media/platform/ti/omap3isp/ispcsi2.c
index ae574e1b6528..f227042b61b6 100644
--- a/drivers/media/platform/ti/omap3isp/ispcsi2.c
+++ b/drivers/media/platform/ti/omap3isp/ispcsi2.c
@@ -1251,6 +1251,7 @@ static int csi2_init_entities(struct isp_csi2_device *csi2)
 				    | MEDIA_PAD_FL_MUST_CONNECT;
 
 	me->ops = &csi2_media_ops;
+	me->function = MEDIA_ENT_F_VID_IF_BRIDGE;
 	ret = media_entity_pads_init(me, CSI2_PADS_NUM, pads);
 	if (ret < 0)
 		return ret;
diff --git a/drivers/media/platform/ti/omap3isp/isppreview.c b/drivers/media/platform/ti/omap3isp/isppreview.c
index e383a57654de..26f7167d1f4f 100644
--- a/drivers/media/platform/ti/omap3isp/isppreview.c
+++ b/drivers/media/platform/ti/omap3isp/isppreview.c
@@ -2294,6 +2294,7 @@ static int preview_init_entities(struct isp_prev_device *prev)
 	pads[PREV_PAD_SOURCE].flags = MEDIA_PAD_FL_SOURCE;
 
 	me->ops = &preview_media_ops;
+	me->function = MEDIA_ENT_F_PROC_VIDEO_PIXEL_FORMATTER;
 	ret = media_entity_pads_init(me, PREV_PADS_NUM, pads);
 	if (ret < 0)
 		goto error_handler_free;
diff --git a/drivers/media/platform/ti/omap3isp/ispresizer.c b/drivers/media/platform/ti/omap3isp/ispresizer.c
index 87d821b02e5c..5dff48489394 100644
--- a/drivers/media/platform/ti/omap3isp/ispresizer.c
+++ b/drivers/media/platform/ti/omap3isp/ispresizer.c
@@ -1738,6 +1738,7 @@ static int resizer_init_entities(struct isp_res_device *res)
 	pads[RESZ_PAD_SOURCE].flags = MEDIA_PAD_FL_SOURCE;
 
 	me->ops = &resizer_media_ops;
+	me->function = MEDIA_ENT_F_PROC_VIDEO_SCALER;
 	ret = media_entity_pads_init(me, RESZ_PADS_NUM, pads);
 	if (ret < 0)
 		return ret;
diff --git a/drivers/media/platform/ti/omap3isp/ispstat.c b/drivers/media/platform/ti/omap3isp/ispstat.c
index 07bd62a93d99..64bc71d830c4 100644
--- a/drivers/media/platform/ti/omap3isp/ispstat.c
+++ b/drivers/media/platform/ti/omap3isp/ispstat.c
@@ -1037,6 +1037,7 @@ static int isp_stat_init_entities(struct ispstat *stat, const char *name,
 
 	stat->pad.flags = MEDIA_PAD_FL_SINK | MEDIA_PAD_FL_MUST_CONNECT;
 	me->ops = NULL;
+	me->function = MEDIA_ENT_F_PROC_VIDEO_STATISTICS;
 
 	return media_entity_pads_init(me, 1, &stat->pad);
 }
-- 
2.51.0


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCHv3 02/12] media: omap3isp: add V4L2_CAP_IO_MC and don't set bus_info
  2025-12-02  7:51 [PATCHv3 00/12] media: omap3isp: v4l2-compliance fixes Hans Verkuil
  2025-12-02  7:51 ` [PATCHv3 01/12] media: omap3isp: configure entity functions Hans Verkuil
@ 2025-12-02  7:51 ` Hans Verkuil
  2025-12-02  7:51 ` [PATCHv3 03/12] media: omap3isp: isp_video_mbus_to_pix/pix_to_mbus fixes Hans Verkuil
                   ` (10 subsequent siblings)
  12 siblings, 0 replies; 16+ messages in thread
From: Hans Verkuil @ 2025-12-02  7:51 UTC (permalink / raw)
  To: linux-media; +Cc: Sakari Ailus, laurent.pinchart, Hans Verkuil

Since this is a media-centric device set the V4L2_CAP_IO_MC
capability. Also don't set bus_info, leave that to the v4l2 core.

This fixes v4l2-compliance errors:

test MC information (see 'Media Driver Info' above): OK
	fail: v4l2-compliance.cpp(661): missing bus_info prefix ('media')

Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
---
 drivers/media/platform/ti/omap3isp/ispvideo.c | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/drivers/media/platform/ti/omap3isp/ispvideo.c b/drivers/media/platform/ti/omap3isp/ispvideo.c
index 0e7f0bf2b346..46609045e2c8 100644
--- a/drivers/media/platform/ti/omap3isp/ispvideo.c
+++ b/drivers/media/platform/ti/omap3isp/ispvideo.c
@@ -645,11 +645,9 @@ isp_video_querycap(struct file *file, void *fh, struct v4l2_capability *cap)
 
 	strscpy(cap->driver, ISP_VIDEO_DRIVER_NAME, sizeof(cap->driver));
 	strscpy(cap->card, video->video.name, sizeof(cap->card));
-	strscpy(cap->bus_info, "media", sizeof(cap->bus_info));
 
 	cap->capabilities = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_VIDEO_OUTPUT
-		| V4L2_CAP_STREAMING | V4L2_CAP_DEVICE_CAPS;
-
+		| V4L2_CAP_STREAMING | V4L2_CAP_DEVICE_CAPS | V4L2_CAP_IO_MC;
 
 	return 0;
 }
@@ -1451,10 +1449,10 @@ int omap3isp_video_init(struct isp_video *video, const char *name)
 	video->video.ioctl_ops = &isp_video_ioctl_ops;
 	if (video->type == V4L2_BUF_TYPE_VIDEO_CAPTURE)
 		video->video.device_caps = V4L2_CAP_VIDEO_CAPTURE
-					 | V4L2_CAP_STREAMING;
+					 | V4L2_CAP_STREAMING | V4L2_CAP_IO_MC;
 	else
 		video->video.device_caps = V4L2_CAP_VIDEO_OUTPUT
-					 | V4L2_CAP_STREAMING;
+					 | V4L2_CAP_STREAMING | V4L2_CAP_IO_MC;
 
 	video->pipe.stream_state = ISP_PIPELINE_STREAM_STOPPED;
 
-- 
2.51.0


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCHv3 03/12] media: omap3isp: isp_video_mbus_to_pix/pix_to_mbus fixes
  2025-12-02  7:51 [PATCHv3 00/12] media: omap3isp: v4l2-compliance fixes Hans Verkuil
  2025-12-02  7:51 ` [PATCHv3 01/12] media: omap3isp: configure entity functions Hans Verkuil
  2025-12-02  7:51 ` [PATCHv3 02/12] media: omap3isp: add V4L2_CAP_IO_MC and don't set bus_info Hans Verkuil
@ 2025-12-02  7:51 ` Hans Verkuil
  2025-12-02  7:51 ` [PATCHv3 04/12] media: omap3isp: implement enum_fmt_vid_cap/out Hans Verkuil
                   ` (9 subsequent siblings)
  12 siblings, 0 replies; 16+ messages in thread
From: Hans Verkuil @ 2025-12-02  7:51 UTC (permalink / raw)
  To: linux-media; +Cc: Sakari Ailus, laurent.pinchart, Hans Verkuil

The isp_video_mbus_to_pix/pix_to_mbus functions did not take
the last empty entry { 0, } of the formats array into account.

As a result, isp_video_mbus_to_pix would accept code 0 and
isp_video_pix_to_mbus would select code 0 if no match was found.

Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
---
 drivers/media/platform/ti/omap3isp/ispvideo.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/media/platform/ti/omap3isp/ispvideo.c b/drivers/media/platform/ti/omap3isp/ispvideo.c
index 46609045e2c8..864d38140b87 100644
--- a/drivers/media/platform/ti/omap3isp/ispvideo.c
+++ b/drivers/media/platform/ti/omap3isp/ispvideo.c
@@ -148,12 +148,12 @@ static unsigned int isp_video_mbus_to_pix(const struct isp_video *video,
 	pix->width = mbus->width;
 	pix->height = mbus->height;
 
-	for (i = 0; i < ARRAY_SIZE(formats); ++i) {
+	for (i = 0; i < ARRAY_SIZE(formats) - 1; ++i) {
 		if (formats[i].code == mbus->code)
 			break;
 	}
 
-	if (WARN_ON(i == ARRAY_SIZE(formats)))
+	if (WARN_ON(i == ARRAY_SIZE(formats) - 1))
 		return 0;
 
 	min_bpl = pix->width * formats[i].bpp;
@@ -191,7 +191,7 @@ static void isp_video_pix_to_mbus(const struct v4l2_pix_format *pix,
 	/* Skip the last format in the loop so that it will be selected if no
 	 * match is found.
 	 */
-	for (i = 0; i < ARRAY_SIZE(formats) - 1; ++i) {
+	for (i = 0; i < ARRAY_SIZE(formats) - 2; ++i) {
 		if (formats[i].pixelformat == pix->pixelformat)
 			break;
 	}
-- 
2.51.0


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCHv3 04/12] media: omap3isp: implement enum_fmt_vid_cap/out
  2025-12-02  7:51 [PATCHv3 00/12] media: omap3isp: v4l2-compliance fixes Hans Verkuil
                   ` (2 preceding siblings ...)
  2025-12-02  7:51 ` [PATCHv3 03/12] media: omap3isp: isp_video_mbus_to_pix/pix_to_mbus fixes Hans Verkuil
@ 2025-12-02  7:51 ` Hans Verkuil
  2025-12-02  7:51 ` [PATCHv3 05/12] media: omap3isp: use V4L2_COLORSPACE_SRGB instead of _JPEG Hans Verkuil
                   ` (8 subsequent siblings)
  12 siblings, 0 replies; 16+ messages in thread
From: Hans Verkuil @ 2025-12-02  7:51 UTC (permalink / raw)
  To: linux-media; +Cc: Sakari Ailus, laurent.pinchart, Hans Verkuil

Add missing ioctls. This makes v4l2-compliance happier:

fail: v4l2-test-formats.cpp(516): pixelformat 59565955 (UYVY) for buftype 1 not reported by ENUM_FMT
	test VIDIOC_G_FMT: FAIL
fail: v4l2-test-formats.cpp(516): pixelformat 59565955 (UYVY) for buftype 1 not reported by ENUM_FMT
	test VIDIOC_TRY_FMT: FAIL
fail: v4l2-test-formats.cpp(516): pixelformat 56595559 (YUYV) for buftype 1 not reported by ENUM_FMT
	test VIDIOC_S_FMT: FAIL

Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
---
 drivers/media/platform/ti/omap3isp/ispvideo.c | 39 +++++++++++++++++--
 1 file changed, 36 insertions(+), 3 deletions(-)

diff --git a/drivers/media/platform/ti/omap3isp/ispvideo.c b/drivers/media/platform/ti/omap3isp/ispvideo.c
index 864d38140b87..5ce8736ca5bd 100644
--- a/drivers/media/platform/ti/omap3isp/ispvideo.c
+++ b/drivers/media/platform/ti/omap3isp/ispvideo.c
@@ -35,6 +35,10 @@
 /*
  * NOTE: When adding new media bus codes, always remember to add
  * corresponding in-memory formats to the table below!!!
+ *
+ * If there are multiple entries with the same pixelformat but
+ * different media bus codes, then keep those together. Otherwise
+ * isp_video_enum_format() cannot detect duplicate pixelformats.
  */
 static struct isp_format_info formats[] = {
 	{ MEDIA_BUS_FMT_Y8_1X8, MEDIA_BUS_FMT_Y8_1X8,
@@ -97,12 +101,12 @@ static struct isp_format_info formats[] = {
 	{ MEDIA_BUS_FMT_UYVY8_1X16, MEDIA_BUS_FMT_UYVY8_1X16,
 	  MEDIA_BUS_FMT_UYVY8_1X16, 0,
 	  V4L2_PIX_FMT_UYVY, 16, 2, },
-	{ MEDIA_BUS_FMT_YUYV8_1X16, MEDIA_BUS_FMT_YUYV8_1X16,
-	  MEDIA_BUS_FMT_YUYV8_1X16, 0,
-	  V4L2_PIX_FMT_YUYV, 16, 2, },
 	{ MEDIA_BUS_FMT_UYVY8_2X8, MEDIA_BUS_FMT_UYVY8_2X8,
 	  MEDIA_BUS_FMT_UYVY8_2X8, 0,
 	  V4L2_PIX_FMT_UYVY, 8, 2, },
+	{ MEDIA_BUS_FMT_YUYV8_1X16, MEDIA_BUS_FMT_YUYV8_1X16,
+	  MEDIA_BUS_FMT_YUYV8_1X16, 0,
+	  V4L2_PIX_FMT_YUYV, 16, 2, },
 	{ MEDIA_BUS_FMT_YUYV8_2X8, MEDIA_BUS_FMT_YUYV8_2X8,
 	  MEDIA_BUS_FMT_YUYV8_2X8, 0,
 	  V4L2_PIX_FMT_YUYV, 8, 2, },
@@ -652,6 +656,33 @@ isp_video_querycap(struct file *file, void *fh, struct v4l2_capability *cap)
 	return 0;
 }
 
+static int
+isp_video_enum_format(struct file *file, void *fh, struct v4l2_fmtdesc *f)
+{
+	struct isp_video *video = video_drvdata(file);
+	unsigned int i, j;
+
+	if (f->type != video->type)
+		return -EINVAL;
+
+	for (i = 0, j = 0; i < ARRAY_SIZE(formats); i++) {
+		/* Weed out duplicate pixelformats with different mbus codes */
+		if (!f->mbus_code && i &&
+		    formats[i - 1].pixelformat == formats[i].pixelformat)
+			continue;
+		if (f->mbus_code && formats[i].code != f->mbus_code)
+			continue;
+
+		if (j == f->index) {
+			f->pixelformat = formats[i].pixelformat;
+			return 0;
+		}
+		j++;
+	}
+
+	return -EINVAL;
+}
+
 static int
 isp_video_get_format(struct file *file, void *fh, struct v4l2_format *format)
 {
@@ -1258,9 +1289,11 @@ isp_video_s_input(struct file *file, void *fh, unsigned int input)
 
 static const struct v4l2_ioctl_ops isp_video_ioctl_ops = {
 	.vidioc_querycap		= isp_video_querycap,
+	.vidioc_enum_fmt_vid_cap	= isp_video_enum_format,
 	.vidioc_g_fmt_vid_cap		= isp_video_get_format,
 	.vidioc_s_fmt_vid_cap		= isp_video_set_format,
 	.vidioc_try_fmt_vid_cap		= isp_video_try_format,
+	.vidioc_enum_fmt_vid_out	= isp_video_enum_format,
 	.vidioc_g_fmt_vid_out		= isp_video_get_format,
 	.vidioc_s_fmt_vid_out		= isp_video_set_format,
 	.vidioc_try_fmt_vid_out		= isp_video_try_format,
-- 
2.51.0


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCHv3 05/12] media: omap3isp: use V4L2_COLORSPACE_SRGB instead of _JPEG
  2025-12-02  7:51 [PATCHv3 00/12] media: omap3isp: v4l2-compliance fixes Hans Verkuil
                   ` (3 preceding siblings ...)
  2025-12-02  7:51 ` [PATCHv3 04/12] media: omap3isp: implement enum_fmt_vid_cap/out Hans Verkuil
@ 2025-12-02  7:51 ` Hans Verkuil
  2025-12-02  7:51 ` [PATCHv3 06/12] media: omap3isp: set initial format Hans Verkuil
                   ` (7 subsequent siblings)
  12 siblings, 0 replies; 16+ messages in thread
From: Hans Verkuil @ 2025-12-02  7:51 UTC (permalink / raw)
  To: linux-media; +Cc: Sakari Ailus, laurent.pinchart, Hans Verkuil

JPEG colorspace should generally not be used unless it is actually
dealing with JPG data. This fixes v4l2-compliance errors:

	fail: v4l2-test-formats.cpp(416): pixelformat != V4L2_PIX_FMT_JPEG && pixelformat != V4L2_PIX_FMT_MJPEG && colorspace == V4L2_COLORSPACE_JPEG
	fail: v4l2-test-formats.cpp(521): testColorspace(!node->is_io_mc, pix.pixelformat, pix.colorspace, pix.ycbcr_enc, pix.quantization)
test VIDIOC_TRY_FMT: FAIL

Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
---
 drivers/media/platform/ti/omap3isp/isppreview.c | 2 +-
 drivers/media/platform/ti/omap3isp/ispresizer.c | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/media/platform/ti/omap3isp/isppreview.c b/drivers/media/platform/ti/omap3isp/isppreview.c
index 26f7167d1f4f..9992db782870 100644
--- a/drivers/media/platform/ti/omap3isp/isppreview.c
+++ b/drivers/media/platform/ti/omap3isp/isppreview.c
@@ -1796,7 +1796,7 @@ static void preview_try_format(struct isp_prev_device *prev,
 		fmt->width = crop->width;
 		fmt->height = crop->height;
 
-		fmt->colorspace = V4L2_COLORSPACE_JPEG;
+		fmt->colorspace = V4L2_COLORSPACE_SRGB;
 		break;
 	}
 
diff --git a/drivers/media/platform/ti/omap3isp/ispresizer.c b/drivers/media/platform/ti/omap3isp/ispresizer.c
index 5dff48489394..ad0127f5b5cb 100644
--- a/drivers/media/platform/ti/omap3isp/ispresizer.c
+++ b/drivers/media/platform/ti/omap3isp/ispresizer.c
@@ -1405,7 +1405,7 @@ static void resizer_try_format(struct isp_res_device *res,
 		break;
 	}
 
-	fmt->colorspace = V4L2_COLORSPACE_JPEG;
+	fmt->colorspace = V4L2_COLORSPACE_SRGB;
 	fmt->field = V4L2_FIELD_NONE;
 }
 
-- 
2.51.0


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCHv3 06/12] media: omap3isp: set initial format
  2025-12-02  7:51 [PATCHv3 00/12] media: omap3isp: v4l2-compliance fixes Hans Verkuil
                   ` (4 preceding siblings ...)
  2025-12-02  7:51 ` [PATCHv3 05/12] media: omap3isp: use V4L2_COLORSPACE_SRGB instead of _JPEG Hans Verkuil
@ 2025-12-02  7:51 ` Hans Verkuil
  2025-12-02  7:51 ` [PATCHv3 07/12] media: omap3isp: rework isp_video_try/set_format Hans Verkuil
                   ` (6 subsequent siblings)
  12 siblings, 0 replies; 16+ messages in thread
From: Hans Verkuil @ 2025-12-02  7:51 UTC (permalink / raw)
  To: linux-media; +Cc: Sakari Ailus, laurent.pinchart, Hans Verkuil

Initialize the v4l2_format to a default. Empty formats are
not allowed in V4L2, so this fixes v4l2-compliance issues:

	fail: v4l2-test-formats.cpp(514): !pix.width || !pix.height
test VIDIOC_G_FMT: FAIL

Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
---
 drivers/media/platform/ti/omap3isp/ispvideo.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/drivers/media/platform/ti/omap3isp/ispvideo.c b/drivers/media/platform/ti/omap3isp/ispvideo.c
index 5ce8736ca5bd..c52312b39598 100644
--- a/drivers/media/platform/ti/omap3isp/ispvideo.c
+++ b/drivers/media/platform/ti/omap3isp/ispvideo.c
@@ -1319,6 +1319,7 @@ static const struct v4l2_ioctl_ops isp_video_ioctl_ops = {
 static int isp_video_open(struct file *file)
 {
 	struct isp_video *video = video_drvdata(file);
+	struct v4l2_mbus_framefmt fmt;
 	struct isp_video_fh *handle;
 	struct vb2_queue *queue;
 	int ret = 0;
@@ -1361,6 +1362,13 @@ static int isp_video_open(struct file *file)
 
 	memset(&handle->format, 0, sizeof(handle->format));
 	handle->format.type = video->type;
+	handle->format.fmt.pix.width = 720;
+	handle->format.fmt.pix.height = 480;
+	handle->format.fmt.pix.pixelformat = V4L2_PIX_FMT_UYVY;
+	handle->format.fmt.pix.field = V4L2_FIELD_NONE;
+	handle->format.fmt.pix.colorspace = V4L2_COLORSPACE_SRGB;
+	isp_video_pix_to_mbus(&handle->format.fmt.pix, &fmt);
+	isp_video_mbus_to_pix(video, &fmt, &handle->format.fmt.pix);
 	handle->timeperframe.denominator = 1;
 
 	handle->video = video;
-- 
2.51.0


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCHv3 07/12] media: omap3isp: rework isp_video_try/set_format
  2025-12-02  7:51 [PATCHv3 00/12] media: omap3isp: v4l2-compliance fixes Hans Verkuil
                   ` (5 preceding siblings ...)
  2025-12-02  7:51 ` [PATCHv3 06/12] media: omap3isp: set initial format Hans Verkuil
@ 2025-12-02  7:51 ` Hans Verkuil
  2025-12-02  7:51 ` [PATCHv3 08/12] media: omap3isp: implement create/prepare_bufs Hans Verkuil
                   ` (5 subsequent siblings)
  12 siblings, 0 replies; 16+ messages in thread
From: Hans Verkuil @ 2025-12-02  7:51 UTC (permalink / raw)
  To: linux-media; +Cc: Sakari Ailus, laurent.pinchart, Hans Verkuil

isp_video_set_format now calls isp_video_try_format first, ensuring
consistent behavior and removing duplicate code in both functions.

This fixes an v4l2-compliance error:

	fail: v4l2-test-formats.cpp(519): !pix.sizeimage
test VIDIOC_S_FMT: FAIL

Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
---
 drivers/media/platform/ti/omap3isp/ispvideo.c | 59 ++++++++++---------
 1 file changed, 30 insertions(+), 29 deletions(-)

diff --git a/drivers/media/platform/ti/omap3isp/ispvideo.c b/drivers/media/platform/ti/omap3isp/ispvideo.c
index c52312b39598..adea39b6d930 100644
--- a/drivers/media/platform/ti/omap3isp/ispvideo.c
+++ b/drivers/media/platform/ti/omap3isp/ispvideo.c
@@ -700,11 +700,15 @@ isp_video_get_format(struct file *file, void *fh, struct v4l2_format *format)
 }
 
 static int
-isp_video_set_format(struct file *file, void *fh, struct v4l2_format *format)
+isp_video_try_format(struct file *file, void *fh, struct v4l2_format *format)
 {
-	struct isp_video_fh *vfh = file_to_isp_video_fh(file);
 	struct isp_video *video = video_drvdata(file);
-	struct v4l2_mbus_framefmt fmt;
+	struct v4l2_subdev_format fmt = {
+		.which = V4L2_SUBDEV_FORMAT_ACTIVE,
+	};
+	struct v4l2_subdev *subdev;
+	u32 pad;
+	int ret;
 
 	if (format->type != video->type)
 		return -EINVAL;
@@ -744,32 +748,11 @@ isp_video_set_format(struct file *file, void *fh, struct v4l2_format *format)
 		break;
 	}
 
-	/* Fill the bytesperline and sizeimage fields by converting to media bus
-	 * format and back to pixel format.
-	 */
-	isp_video_pix_to_mbus(&format->fmt.pix, &fmt);
-	isp_video_mbus_to_pix(video, &fmt, &format->fmt.pix);
-
-	mutex_lock(&video->mutex);
-	vfh->format = *format;
-	mutex_unlock(&video->mutex);
-
-	return 0;
-}
-
-static int
-isp_video_try_format(struct file *file, void *fh, struct v4l2_format *format)
-{
-	struct isp_video *video = video_drvdata(file);
-	struct v4l2_subdev_format fmt = {
-		.which = V4L2_SUBDEV_FORMAT_ACTIVE,
-	};
-	struct v4l2_subdev *subdev;
-	u32 pad;
-	int ret;
-
-	if (format->type != video->type)
-		return -EINVAL;
+	if (video->type == V4L2_BUF_TYPE_VIDEO_OUTPUT) {
+		isp_video_pix_to_mbus(&format->fmt.pix, &fmt.format);
+		isp_video_mbus_to_pix(video, &fmt.format, &format->fmt.pix);
+		return 0;
+	}
 
 	subdev = isp_video_remote_subdev(video, &pad);
 	if (subdev == NULL)
@@ -786,6 +769,24 @@ isp_video_try_format(struct file *file, void *fh, struct v4l2_format *format)
 	return 0;
 }
 
+static int
+isp_video_set_format(struct file *file, void *fh, struct v4l2_format *format)
+{
+	struct isp_video_fh *vfh = file_to_isp_video_fh(file);
+	struct isp_video *video = video_drvdata(file);
+	int ret;
+
+	ret = isp_video_try_format(file, fh, format);
+	if (ret)
+		return ret;
+
+	mutex_lock(&video->mutex);
+	vfh->format = *format;
+	mutex_unlock(&video->mutex);
+
+	return 0;
+}
+
 static int
 isp_video_get_selection(struct file *file, void *fh, struct v4l2_selection *sel)
 {
-- 
2.51.0


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCHv3 08/12] media: omap3isp: implement create/prepare_bufs
  2025-12-02  7:51 [PATCHv3 00/12] media: omap3isp: v4l2-compliance fixes Hans Verkuil
                   ` (6 preceding siblings ...)
  2025-12-02  7:51 ` [PATCHv3 07/12] media: omap3isp: rework isp_video_try/set_format Hans Verkuil
@ 2025-12-02  7:51 ` Hans Verkuil
  2025-12-02  7:51 ` [PATCHv3 09/12] media: omap3isp: better VIDIOC_G/S_PARM handling Hans Verkuil
                   ` (4 subsequent siblings)
  12 siblings, 0 replies; 16+ messages in thread
From: Hans Verkuil @ 2025-12-02  7:51 UTC (permalink / raw)
  To: linux-media; +Cc: Sakari Ailus, laurent.pinchart, Hans Verkuil

Add missing ioctls. This makes v4l2-compliance happier:

	warn: v4l2-test-buffers.cpp(813): VIDIOC_CREATE_BUFS not supported
test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK

Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
---
 drivers/media/platform/ti/omap3isp/ispvideo.c | 47 ++++++++++++++++++-
 1 file changed, 45 insertions(+), 2 deletions(-)

diff --git a/drivers/media/platform/ti/omap3isp/ispvideo.c b/drivers/media/platform/ti/omap3isp/ispvideo.c
index adea39b6d930..ac170ef4fa01 100644
--- a/drivers/media/platform/ti/omap3isp/ispvideo.c
+++ b/drivers/media/platform/ti/omap3isp/ispvideo.c
@@ -329,6 +329,13 @@ static int isp_video_queue_setup(struct vb2_queue *queue,
 	struct isp_video_fh *vfh = vb2_get_drv_priv(queue);
 	struct isp_video *video = vfh->video;
 
+	if (*num_planes) {
+		if (*num_planes != 1)
+			return -EINVAL;
+		if (sizes[0] < vfh->format.fmt.pix.sizeimage)
+			return -EINVAL;
+		return 0;
+	}
 	*num_planes = 1;
 
 	sizes[0] = vfh->format.fmt.pix.sizeimage;
@@ -344,6 +351,7 @@ static int isp_video_buffer_prepare(struct vb2_buffer *buf)
 {
 	struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(buf);
 	struct isp_video_fh *vfh = vb2_get_drv_priv(buf->vb2_queue);
+	unsigned int size = vfh->format.fmt.pix.sizeimage;
 	struct isp_buffer *buffer = to_isp_buffer(vbuf);
 	struct isp_video *video = vfh->video;
 	dma_addr_t addr;
@@ -364,8 +372,13 @@ static int isp_video_buffer_prepare(struct vb2_buffer *buf)
 		return -EINVAL;
 	}
 
-	vb2_set_plane_payload(&buffer->vb.vb2_buf, 0,
-			      vfh->format.fmt.pix.sizeimage);
+	if (vb2_plane_size(&buffer->vb.vb2_buf, 0) < size) {
+		dev_dbg(video->isp->dev,
+			"data will not fit into plane (%lu < %u)\n",
+			vb2_plane_size(&buffer->vb.vb2_buf, 0), size);
+		return -EINVAL;
+	}
+	vb2_set_plane_payload(&buffer->vb.vb2_buf, 0, size);
 	buffer->dma = addr;
 
 	return 0;
@@ -935,6 +948,20 @@ isp_video_reqbufs(struct file *file, void *fh, struct v4l2_requestbuffers *rb)
 	return ret;
 }
 
+static int
+isp_video_create_bufs(struct file *file, void *fh, struct v4l2_create_buffers *p)
+{
+	struct isp_video_fh *vfh = file_to_isp_video_fh(file);
+	struct isp_video *video = video_drvdata(file);
+	int ret;
+
+	mutex_lock(&video->queue_lock);
+	ret = vb2_create_bufs(&vfh->queue, p);
+	mutex_unlock(&video->queue_lock);
+
+	return ret;
+}
+
 static int
 isp_video_querybuf(struct file *file, void *fh, struct v4l2_buffer *b)
 {
@@ -949,6 +976,20 @@ isp_video_querybuf(struct file *file, void *fh, struct v4l2_buffer *b)
 	return ret;
 }
 
+static int
+isp_video_prepare_buf(struct file *file, void *fh, struct v4l2_buffer *b)
+{
+	struct isp_video_fh *vfh = file_to_isp_video_fh(file);
+	struct isp_video *video = video_drvdata(file);
+	int ret;
+
+	mutex_lock(&video->queue_lock);
+	ret = vb2_prepare_buf(&vfh->queue, video->video.v4l2_dev->mdev, b);
+	mutex_unlock(&video->queue_lock);
+
+	return ret;
+}
+
 static int
 isp_video_qbuf(struct file *file, void *fh, struct v4l2_buffer *b)
 {
@@ -1303,7 +1344,9 @@ static const struct v4l2_ioctl_ops isp_video_ioctl_ops = {
 	.vidioc_g_parm			= isp_video_get_param,
 	.vidioc_s_parm			= isp_video_set_param,
 	.vidioc_reqbufs			= isp_video_reqbufs,
+	.vidioc_create_bufs		= isp_video_create_bufs,
 	.vidioc_querybuf		= isp_video_querybuf,
+	.vidioc_prepare_buf		= isp_video_prepare_buf,
 	.vidioc_qbuf			= isp_video_qbuf,
 	.vidioc_dqbuf			= isp_video_dqbuf,
 	.vidioc_streamon		= isp_video_streamon,
-- 
2.51.0


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCHv3 09/12] media: omap3isp: better VIDIOC_G/S_PARM handling
  2025-12-02  7:51 [PATCHv3 00/12] media: omap3isp: v4l2-compliance fixes Hans Verkuil
                   ` (7 preceding siblings ...)
  2025-12-02  7:51 ` [PATCHv3 08/12] media: omap3isp: implement create/prepare_bufs Hans Verkuil
@ 2025-12-02  7:51 ` Hans Verkuil
  2025-12-02  7:51 ` [PATCHv3 10/12] media: omap3isp: support ctrl events for isppreview Hans Verkuil
                   ` (3 subsequent siblings)
  12 siblings, 0 replies; 16+ messages in thread
From: Hans Verkuil @ 2025-12-02  7:51 UTC (permalink / raw)
  To: linux-media; +Cc: Sakari Ailus, laurent.pinchart, Hans Verkuil

Fix various v4l2-compliance errors relating to timeperframe.

VIDIOC_G/S_PARM is only supported for Video Output, so disable
these ioctls for Capture devices.

Ensure numerator and denominator are never 0.

Set missing V4L2_CAP_TIMEPERFRAME capability for VIDIOC_S_PARM.

v4l2-compliance:

	fail: v4l2-test-formats.cpp(1388): out->timeperframe.numerator == 0 || out->timeperframe.denominator == 0
test VIDIOC_G/S_PARM: FAIL

Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
---
 drivers/media/platform/ti/omap3isp/ispvideo.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/drivers/media/platform/ti/omap3isp/ispvideo.c b/drivers/media/platform/ti/omap3isp/ispvideo.c
index ac170ef4fa01..86cb27b6ca4e 100644
--- a/drivers/media/platform/ti/omap3isp/ispvideo.c
+++ b/drivers/media/platform/ti/omap3isp/ispvideo.c
@@ -928,7 +928,10 @@ isp_video_set_param(struct file *file, void *fh, struct v4l2_streamparm *a)
 
 	if (a->parm.output.timeperframe.denominator == 0)
 		a->parm.output.timeperframe.denominator = 1;
+	if (a->parm.output.timeperframe.numerator == 0)
+		a->parm.output.timeperframe.numerator = 1;
 
+	a->parm.output.capability = V4L2_CAP_TIMEPERFRAME;
 	vfh->timeperframe = a->parm.output.timeperframe;
 
 	return 0;
@@ -1413,6 +1416,7 @@ static int isp_video_open(struct file *file)
 	handle->format.fmt.pix.colorspace = V4L2_COLORSPACE_SRGB;
 	isp_video_pix_to_mbus(&handle->format.fmt.pix, &fmt);
 	isp_video_mbus_to_pix(video, &fmt, &handle->format.fmt.pix);
+	handle->timeperframe.numerator = 1;
 	handle->timeperframe.denominator = 1;
 
 	handle->video = video;
@@ -1532,12 +1536,15 @@ int omap3isp_video_init(struct isp_video *video, const char *name)
 	video->video.vfl_type = VFL_TYPE_VIDEO;
 	video->video.release = video_device_release_empty;
 	video->video.ioctl_ops = &isp_video_ioctl_ops;
-	if (video->type == V4L2_BUF_TYPE_VIDEO_CAPTURE)
+	if (video->type == V4L2_BUF_TYPE_VIDEO_CAPTURE) {
 		video->video.device_caps = V4L2_CAP_VIDEO_CAPTURE
 					 | V4L2_CAP_STREAMING | V4L2_CAP_IO_MC;
-	else
+		v4l2_disable_ioctl(&video->video, VIDIOC_S_PARM);
+		v4l2_disable_ioctl(&video->video, VIDIOC_G_PARM);
+	} else {
 		video->video.device_caps = V4L2_CAP_VIDEO_OUTPUT
 					 | V4L2_CAP_STREAMING | V4L2_CAP_IO_MC;
+	}
 
 	video->pipe.stream_state = ISP_PIPELINE_STREAM_STOPPED;
 
-- 
2.51.0


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCHv3 10/12] media: omap3isp: support ctrl events for isppreview
  2025-12-02  7:51 [PATCHv3 00/12] media: omap3isp: v4l2-compliance fixes Hans Verkuil
                   ` (8 preceding siblings ...)
  2025-12-02  7:51 ` [PATCHv3 09/12] media: omap3isp: better VIDIOC_G/S_PARM handling Hans Verkuil
@ 2025-12-02  7:51 ` Hans Verkuil
  2025-12-02  7:51 ` [PATCHv3 11/12] media: omap3isp: ispccp2: always clamp in ccp2_try_format() Hans Verkuil
                   ` (2 subsequent siblings)
  12 siblings, 0 replies; 16+ messages in thread
From: Hans Verkuil @ 2025-12-02  7:51 UTC (permalink / raw)
  To: linux-media; +Cc: Sakari Ailus, laurent.pinchart, Hans Verkuil

The preview subdev device was missing V4L2_SUBDEV_FL_HAS_EVENTS,
and that prevented VIDIOC_SUBSCRIBE_EVENT from working.

Fixes a v4l2-compliance error:

	fail: v4l2-test-controls.cpp(1128): subscribe event for control 'User Controls' failed
test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: FAIL

Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
---
 drivers/media/platform/ti/omap3isp/isppreview.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/media/platform/ti/omap3isp/isppreview.c b/drivers/media/platform/ti/omap3isp/isppreview.c
index 9992db782870..3e9e213c6d8a 100644
--- a/drivers/media/platform/ti/omap3isp/isppreview.c
+++ b/drivers/media/platform/ti/omap3isp/isppreview.c
@@ -2277,7 +2277,7 @@ static int preview_init_entities(struct isp_prev_device *prev)
 	strscpy(sd->name, "OMAP3 ISP preview", sizeof(sd->name));
 	sd->grp_id = 1 << 16;	/* group ID for isp subdevs */
 	v4l2_set_subdevdata(sd, prev);
-	sd->flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
+	sd->flags |= V4L2_SUBDEV_FL_HAS_EVENTS | V4L2_SUBDEV_FL_HAS_DEVNODE;
 
 	v4l2_ctrl_handler_init(&prev->ctrls, 2);
 	v4l2_ctrl_new_std(&prev->ctrls, &preview_ctrl_ops, V4L2_CID_BRIGHTNESS,
-- 
2.51.0


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCHv3 11/12] media: omap3isp: ispccp2: always clamp in ccp2_try_format()
  2025-12-02  7:51 [PATCHv3 00/12] media: omap3isp: v4l2-compliance fixes Hans Verkuil
                   ` (9 preceding siblings ...)
  2025-12-02  7:51 ` [PATCHv3 10/12] media: omap3isp: support ctrl events for isppreview Hans Verkuil
@ 2025-12-02  7:51 ` Hans Verkuil
  2025-12-02  7:51 ` [PATCHv3 12/12] media: omap3isp: isppreview: always clamp in preview_try_format() Hans Verkuil
  2025-12-19 12:34 ` [PATCHv3 00/12] media: omap3isp: v4l2-compliance fixes Sakari Ailus
  12 siblings, 0 replies; 16+ messages in thread
From: Hans Verkuil @ 2025-12-02  7:51 UTC (permalink / raw)
  To: linux-media; +Cc: Sakari Ailus, laurent.pinchart, Hans Verkuil

If ccp2->input == CCP2_INPUT_NONE, then try_format didn't clamp
the width and height. This can happen with v4l2-compliance tests.

Always clamp.

This fixes this v4l2-compliance error:

	fail: v4l2-test-subdevs.cpp(171): fse.max_width == ~0U || fse.max_height == ~0U
	fail: v4l2-test-subdevs.cpp(270): ret && ret != ENOTTY
test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: FAIL

Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
---
 drivers/media/platform/ti/omap3isp/ispccp2.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/media/platform/ti/omap3isp/ispccp2.c b/drivers/media/platform/ti/omap3isp/ispccp2.c
index f4147c79639c..d668111b44f4 100644
--- a/drivers/media/platform/ti/omap3isp/ispccp2.c
+++ b/drivers/media/platform/ti/omap3isp/ispccp2.c
@@ -658,7 +658,7 @@ static void ccp2_try_format(struct isp_ccp2_device *ccp2,
 			fmt->height = clamp_t(u32, fmt->height,
 					      ISPCCP2_DAT_SIZE_MIN,
 					      ISPCCP2_DAT_SIZE_MAX);
-		} else if (ccp2->input == CCP2_INPUT_MEMORY) {
+		} else {
 			fmt->width = clamp_t(u32, fmt->width,
 					     ISPCCP2_LCM_HSIZE_COUNT_MIN,
 					     ISPCCP2_LCM_HSIZE_COUNT_MAX);
-- 
2.51.0


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCHv3 12/12] media: omap3isp: isppreview: always clamp in preview_try_format()
  2025-12-02  7:51 [PATCHv3 00/12] media: omap3isp: v4l2-compliance fixes Hans Verkuil
                   ` (10 preceding siblings ...)
  2025-12-02  7:51 ` [PATCHv3 11/12] media: omap3isp: ispccp2: always clamp in ccp2_try_format() Hans Verkuil
@ 2025-12-02  7:51 ` Hans Verkuil
  2025-12-19 12:34 ` [PATCHv3 00/12] media: omap3isp: v4l2-compliance fixes Sakari Ailus
  12 siblings, 0 replies; 16+ messages in thread
From: Hans Verkuil @ 2025-12-02  7:51 UTC (permalink / raw)
  To: linux-media; +Cc: Sakari Ailus, laurent.pinchart, Hans Verkuil

If prev->input != PREVIEW_INPUT_MEMORY the width and height weren't
clamped. Just always clamp.

This fixes a v4l2-compliance error:

	fail: v4l2-test-subdevs.cpp(171): fse.max_width == ~0U || fse.max_height == ~0U
	fail: v4l2-test-subdevs.cpp(270): ret && ret != ENOTTY
test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: FAIL

Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
---
 .../media/platform/ti/omap3isp/isppreview.c   | 21 +++++++------------
 1 file changed, 8 insertions(+), 13 deletions(-)

diff --git a/drivers/media/platform/ti/omap3isp/isppreview.c b/drivers/media/platform/ti/omap3isp/isppreview.c
index 3e9e213c6d8a..3f3b5bd9cdc7 100644
--- a/drivers/media/platform/ti/omap3isp/isppreview.c
+++ b/drivers/media/platform/ti/omap3isp/isppreview.c
@@ -1742,22 +1742,17 @@ static void preview_try_format(struct isp_prev_device *prev,
 
 	switch (pad) {
 	case PREV_PAD_SINK:
-		/* When reading data from the CCDC, the input size has already
-		 * been mangled by the CCDC output pad so it can be accepted
-		 * as-is.
-		 *
-		 * When reading data from memory, clamp the requested width and
-		 * height. The TRM doesn't specify a minimum input height, make
+		/*
+		 * Clamp the requested width and height.
+		 * The TRM doesn't specify a minimum input height, make
 		 * sure we got enough lines to enable the noise filter and color
 		 * filter array interpolation.
 		 */
-		if (prev->input == PREVIEW_INPUT_MEMORY) {
-			fmt->width = clamp_t(u32, fmt->width, PREV_MIN_IN_WIDTH,
-					     preview_max_out_width(prev));
-			fmt->height = clamp_t(u32, fmt->height,
-					      PREV_MIN_IN_HEIGHT,
-					      PREV_MAX_IN_HEIGHT);
-		}
+		fmt->width = clamp_t(u32, fmt->width, PREV_MIN_IN_WIDTH,
+				     preview_max_out_width(prev));
+		fmt->height = clamp_t(u32, fmt->height,
+				      PREV_MIN_IN_HEIGHT,
+				      PREV_MAX_IN_HEIGHT);
 
 		fmt->colorspace = V4L2_COLORSPACE_SRGB;
 
-- 
2.51.0


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* Re: [PATCHv3 00/12] media: omap3isp: v4l2-compliance fixes
  2025-12-02  7:51 [PATCHv3 00/12] media: omap3isp: v4l2-compliance fixes Hans Verkuil
                   ` (11 preceding siblings ...)
  2025-12-02  7:51 ` [PATCHv3 12/12] media: omap3isp: isppreview: always clamp in preview_try_format() Hans Verkuil
@ 2025-12-19 12:34 ` Sakari Ailus
  2026-01-06  7:20   ` Hans Verkuil
  12 siblings, 1 reply; 16+ messages in thread
From: Sakari Ailus @ 2025-12-19 12:34 UTC (permalink / raw)
  To: Hans Verkuil; +Cc: linux-media, laurent.pinchart

Hi Hans,

On Tue, Dec 02, 2025 at 08:51:08AM +0100, Hans Verkuil wrote:
> When I worked on the patch series to remove the vb2 wait_prepare/finish
> callbacks, I had to test that series on my Beagle xM board with a
> Leopard Imaging li5m03 camera.
> 
> Since I wanted to use v4l2-compliance to test the vb2 change, I first had
> to fix a bunch of other compliance problems in this driver so it would
> actually be able to run the streaming tests.
> 
> This series contains the fixes I made to get to that point.
> 
> It depends on one sensor driver fix (posted separately):
> 
> https://patchwork.linuxtv.org/project/linux-media/patch/554fb9d7-374b-4868-b91b-959b8fd69b4d@kernel.org/
> 
> This series doesn't fix all compliance problems, but at least it is
> a lot better now.

Acked-by: Sakari Ailus <sakari.ailus@linux.intel.com>

Also let me know if you'd wish me to pick these.

-- 
Kind regards,

Sakari Ailus

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCHv3 00/12] media: omap3isp: v4l2-compliance fixes
  2025-12-19 12:34 ` [PATCHv3 00/12] media: omap3isp: v4l2-compliance fixes Sakari Ailus
@ 2026-01-06  7:20   ` Hans Verkuil
  2026-01-07 21:33     ` Sakari Ailus
  0 siblings, 1 reply; 16+ messages in thread
From: Hans Verkuil @ 2026-01-06  7:20 UTC (permalink / raw)
  To: Sakari Ailus; +Cc: linux-media, laurent.pinchart

On 19/12/2025 13:34, Sakari Ailus wrote:
> Hi Hans,
> 
> On Tue, Dec 02, 2025 at 08:51:08AM +0100, Hans Verkuil wrote:
>> When I worked on the patch series to remove the vb2 wait_prepare/finish
>> callbacks, I had to test that series on my Beagle xM board with a
>> Leopard Imaging li5m03 camera.
>>
>> Since I wanted to use v4l2-compliance to test the vb2 change, I first had
>> to fix a bunch of other compliance problems in this driver so it would
>> actually be able to run the streaming tests.
>>
>> This series contains the fixes I made to get to that point.
>>
>> It depends on one sensor driver fix (posted separately):
>>
>> https://patchwork.linuxtv.org/project/linux-media/patch/554fb9d7-374b-4868-b91b-959b8fd69b4d@kernel.org/
>>
>> This series doesn't fix all compliance problems, but at least it is
>> a lot better now.
> 
> Acked-by: Sakari Ailus <sakari.ailus@linux.intel.com>
> 
> Also let me know if you'd wish me to pick these.
> 

I can take this series and add your Ack.

Thank you for looking at this!

Regards,

	Hans

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCHv3 00/12] media: omap3isp: v4l2-compliance fixes
  2026-01-06  7:20   ` Hans Verkuil
@ 2026-01-07 21:33     ` Sakari Ailus
  0 siblings, 0 replies; 16+ messages in thread
From: Sakari Ailus @ 2026-01-07 21:33 UTC (permalink / raw)
  To: Hans Verkuil; +Cc: linux-media, laurent.pinchart

On Tue, Jan 06, 2026 at 08:20:28AM +0100, Hans Verkuil wrote:
> On 19/12/2025 13:34, Sakari Ailus wrote:
> > Hi Hans,
> > 
> > On Tue, Dec 02, 2025 at 08:51:08AM +0100, Hans Verkuil wrote:
> >> When I worked on the patch series to remove the vb2 wait_prepare/finish
> >> callbacks, I had to test that series on my Beagle xM board with a
> >> Leopard Imaging li5m03 camera.
> >>
> >> Since I wanted to use v4l2-compliance to test the vb2 change, I first had
> >> to fix a bunch of other compliance problems in this driver so it would
> >> actually be able to run the streaming tests.
> >>
> >> This series contains the fixes I made to get to that point.
> >>
> >> It depends on one sensor driver fix (posted separately):
> >>
> >> https://patchwork.linuxtv.org/project/linux-media/patch/554fb9d7-374b-4868-b91b-959b8fd69b4d@kernel.org/
> >>
> >> This series doesn't fix all compliance problems, but at least it is
> >> a lot better now.
> > 
> > Acked-by: Sakari Ailus <sakari.ailus@linux.intel.com>
> > 
> > Also let me know if you'd wish me to pick these.
> > 
> 
> I can take this series and add your Ack.
> 
> Thank you for looking at this!

Sure, thanks!

-- 
Sakari Ailus

^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2026-01-07 21:33 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-12-02  7:51 [PATCHv3 00/12] media: omap3isp: v4l2-compliance fixes Hans Verkuil
2025-12-02  7:51 ` [PATCHv3 01/12] media: omap3isp: configure entity functions Hans Verkuil
2025-12-02  7:51 ` [PATCHv3 02/12] media: omap3isp: add V4L2_CAP_IO_MC and don't set bus_info Hans Verkuil
2025-12-02  7:51 ` [PATCHv3 03/12] media: omap3isp: isp_video_mbus_to_pix/pix_to_mbus fixes Hans Verkuil
2025-12-02  7:51 ` [PATCHv3 04/12] media: omap3isp: implement enum_fmt_vid_cap/out Hans Verkuil
2025-12-02  7:51 ` [PATCHv3 05/12] media: omap3isp: use V4L2_COLORSPACE_SRGB instead of _JPEG Hans Verkuil
2025-12-02  7:51 ` [PATCHv3 06/12] media: omap3isp: set initial format Hans Verkuil
2025-12-02  7:51 ` [PATCHv3 07/12] media: omap3isp: rework isp_video_try/set_format Hans Verkuil
2025-12-02  7:51 ` [PATCHv3 08/12] media: omap3isp: implement create/prepare_bufs Hans Verkuil
2025-12-02  7:51 ` [PATCHv3 09/12] media: omap3isp: better VIDIOC_G/S_PARM handling Hans Verkuil
2025-12-02  7:51 ` [PATCHv3 10/12] media: omap3isp: support ctrl events for isppreview Hans Verkuil
2025-12-02  7:51 ` [PATCHv3 11/12] media: omap3isp: ispccp2: always clamp in ccp2_try_format() Hans Verkuil
2025-12-02  7:51 ` [PATCHv3 12/12] media: omap3isp: isppreview: always clamp in preview_try_format() Hans Verkuil
2025-12-19 12:34 ` [PATCHv3 00/12] media: omap3isp: v4l2-compliance fixes Sakari Ailus
2026-01-06  7:20   ` Hans Verkuil
2026-01-07 21:33     ` Sakari Ailus

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox