This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: vivid: fix CREATE_BUFS support in queue_setup()
Author:  Hans Verkuil <hverkuil-ci...@xs4all.nl>
Date:    Wed Jun 26 13:00:49 2024 +0200

While queue_setup was correct for CREATE_BUFS support for
video devices, for VBI, SDR and touch devices it was wrong.

This was found after adding new v4l2-compliance tests.

Signed-off-by: Hans Verkuil <hverkuil-ci...@xs4all.nl>

 drivers/media/test-drivers/vivid/vivid-sdr-cap.c   | 7 ++++++-
 drivers/media/test-drivers/vivid/vivid-touch-cap.c | 6 +++---
 drivers/media/test-drivers/vivid/vivid-vbi-cap.c   | 2 ++
 drivers/media/test-drivers/vivid/vivid-vbi-out.c   | 2 ++
 4 files changed, 13 insertions(+), 4 deletions(-)

---

diff --git a/drivers/media/test-drivers/vivid/vivid-sdr-cap.c 
b/drivers/media/test-drivers/vivid/vivid-sdr-cap.c
index a81f26b76988..38cda33dffb2 100644
--- a/drivers/media/test-drivers/vivid/vivid-sdr-cap.c
+++ b/drivers/media/test-drivers/vivid/vivid-sdr-cap.c
@@ -219,8 +219,13 @@ static int sdr_cap_queue_setup(struct vb2_queue *vq,
                       unsigned sizes[], struct device *alloc_devs[])
 {
        /* 2 = max 16-bit sample returned */
-       sizes[0] = SDR_CAP_SAMPLES_PER_BUF * 2;
+       u32 size = SDR_CAP_SAMPLES_PER_BUF * 2;
+
+       if (*nplanes)
+               return sizes[0] < size ? -EINVAL : 0;
+
        *nplanes = 1;
+       sizes[0] = size;
        return 0;
 }
 
diff --git a/drivers/media/test-drivers/vivid/vivid-touch-cap.c 
b/drivers/media/test-drivers/vivid/vivid-touch-cap.c
index 3888c21b4d0c..3600b084bca5 100644
--- a/drivers/media/test-drivers/vivid/vivid-touch-cap.c
+++ b/drivers/media/test-drivers/vivid/vivid-touch-cap.c
@@ -17,13 +17,13 @@ static int touch_cap_queue_setup(struct vb2_queue *vq, 
unsigned int *nbuffers,
        unsigned int size = f->sizeimage;
 
        if (*nplanes) {
-               if (sizes[0] < size)
+               if (*nplanes != 1)
                        return -EINVAL;
-       } else {
-               sizes[0] = size;
+               return sizes[0] < size ? -EINVAL : 0;
        }
 
        *nplanes = 1;
+       sizes[0] = size;
        return 0;
 }
 
diff --git a/drivers/media/test-drivers/vivid/vivid-vbi-cap.c 
b/drivers/media/test-drivers/vivid/vivid-vbi-cap.c
index 3840b3a664ac..95387d57eb93 100644
--- a/drivers/media/test-drivers/vivid/vivid-vbi-cap.c
+++ b/drivers/media/test-drivers/vivid/vivid-vbi-cap.c
@@ -132,6 +132,8 @@ static int vbi_cap_queue_setup(struct vb2_queue *vq,
        if (!vivid_is_sdtv_cap(dev))
                return -EINVAL;
 
+       if (*nplanes)
+               return sizes[0] < size ? -EINVAL : 0;
        sizes[0] = size;
 
        *nplanes = 1;
diff --git a/drivers/media/test-drivers/vivid/vivid-vbi-out.c 
b/drivers/media/test-drivers/vivid/vivid-vbi-out.c
index 434a10676417..871a56d93425 100644
--- a/drivers/media/test-drivers/vivid/vivid-vbi-out.c
+++ b/drivers/media/test-drivers/vivid/vivid-vbi-out.c
@@ -28,6 +28,8 @@ static int vbi_out_queue_setup(struct vb2_queue *vq,
        if (!vivid_is_svid_out(dev))
                return -EINVAL;
 
+       if (*nplanes)
+               return sizes[0] < size ? -EINVAL : 0;
        sizes[0] = size;
 
        *nplanes = 1;

Reply via email to