]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
media: mgb4: Fix resolution change events triggering
authorMartin Tůma <martin.tuma@digiteqautomotive.com>
Mon, 7 Apr 2025 15:50:35 +0000 (17:50 +0200)
committerHans Verkuil <hverkuil@xs4all.nl>
Fri, 25 Apr 2025 13:14:32 +0000 (15:14 +0200)
Always generate the resolution change event when the HW reports it and only
discard the streaming termination in case the new resolution is the same as
the old one. The old logic prevented events on
"no signal" -> "valid resolution" transitions as VIDIOC_QUERY_DV_TIMINGS
never updates the timings when there is no signal present.

Signed-off-by: Martin Tůma <martin.tuma@digiteqautomotive.com>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
drivers/media/pci/mgb4/mgb4_vin.c

index 434eaf0440e2ca499cff3cbd42e4abb1145bf3fa..6e806e075837297493ead128ae9ab7b17447e79c 100644 (file)
@@ -749,14 +749,14 @@ static void signal_change(struct work_struct *work)
        u32 width = resolution >> 16;
        u32 height = resolution & 0xFFFF;
 
-       if (timings->width != width || timings->height != height) {
-               static const struct v4l2_event ev = {
-                       .type = V4L2_EVENT_SOURCE_CHANGE,
-                       .u.src_change.changes = V4L2_EVENT_SRC_CH_RESOLUTION,
-               };
+       static const struct v4l2_event ev = {
+               .type = V4L2_EVENT_SOURCE_CHANGE,
+               .u.src_change.changes = V4L2_EVENT_SRC_CH_RESOLUTION,
+       };
 
-               v4l2_event_queue(&vindev->vdev, &ev);
+       v4l2_event_queue(&vindev->vdev, &ev);
 
+       if (timings->width != width || timings->height != height) {
                if (vb2_is_streaming(&vindev->queue))
                        vb2_queue_error(&vindev->queue);
        }