lkml.org 
[lkml]   [2022]   [Mar]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 5.15 03/50] media: staging: media: zoran: fix various V4L2 compliance errors
    Date
    From: Hans Verkuil <hverkuil-cisco@xs4all.nl>

    [ Upstream commit 914941827aad5ecddf9bf3a6dee67fbec1af1fff ]

    This fixes several issues found with 'v4l2-compliance -s':

    1) read()/write() is supported, but not reported in the capabilities
    2) S_STD(G_STD()) failed: setting the same standard should just return 0.
    3) G_PARM failed to set readbuffers.
    4) different field values in the format vs. what v4l2_buffer reported.
    5) zero the sequence number when starting streaming.
    6) drop VB_USERPTR: makes no sense with dma_contig streaming.

    Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    Signed-off-by: Corentin Labbe <clabbe@baylibre.com>
    Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/staging/media/zoran/zoran_card.c | 2 +-
    drivers/staging/media/zoran/zoran_driver.c | 13 ++++++++++---
    2 files changed, 11 insertions(+), 4 deletions(-)

    diff --git a/drivers/staging/media/zoran/zoran_card.c b/drivers/staging/media/zoran/zoran_card.c
    index 677d3a26cef4..175654d104c5 100644
    --- a/drivers/staging/media/zoran/zoran_card.c
    +++ b/drivers/staging/media/zoran/zoran_card.c
    @@ -811,7 +811,7 @@ static int zoran_init_video_device(struct zoran *zr, struct video_device *video_
    *video_dev = zoran_template;
    video_dev->v4l2_dev = &zr->v4l2_dev;
    video_dev->lock = &zr->lock;
    - video_dev->device_caps = V4L2_CAP_STREAMING | dir;
    + video_dev->device_caps = V4L2_CAP_STREAMING | V4L2_CAP_READWRITE | dir;

    strscpy(video_dev->name, ZR_DEVNAME(zr), sizeof(video_dev->name));
    /*
    diff --git a/drivers/staging/media/zoran/zoran_driver.c b/drivers/staging/media/zoran/zoran_driver.c
    index 551db338c7f7..84665637ebb7 100644
    --- a/drivers/staging/media/zoran/zoran_driver.c
    +++ b/drivers/staging/media/zoran/zoran_driver.c
    @@ -255,8 +255,6 @@ static int zoran_querycap(struct file *file, void *__fh, struct v4l2_capability
    strscpy(cap->card, ZR_DEVNAME(zr), sizeof(cap->card));
    strscpy(cap->driver, "zoran", sizeof(cap->driver));
    snprintf(cap->bus_info, sizeof(cap->bus_info), "PCI:%s", pci_name(zr->pci_dev));
    - cap->device_caps = zr->video_dev->device_caps;
    - cap->capabilities = cap->device_caps | V4L2_CAP_DEVICE_CAPS;
    return 0;
    }

    @@ -582,6 +580,9 @@ static int zoran_s_std(struct file *file, void *__fh, v4l2_std_id std)
    struct zoran *zr = video_drvdata(file);
    int res = 0;

    + if (zr->norm == std)
    + return 0;
    +
    if (zr->running != ZORAN_MAP_MODE_NONE)
    return -EBUSY;

    @@ -739,6 +740,7 @@ static int zoran_g_parm(struct file *file, void *priv, struct v4l2_streamparm *p
    if (parm->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
    return -EINVAL;

    + parm->parm.capture.readbuffers = 9;
    return 0;
    }

    @@ -869,6 +871,10 @@ int zr_set_buf(struct zoran *zr)
    vbuf = &buf->vbuf;

    buf->vbuf.field = V4L2_FIELD_INTERLACED;
    + if (BUZ_MAX_HEIGHT < (zr->v4l_settings.height * 2))
    + buf->vbuf.field = V4L2_FIELD_INTERLACED;
    + else
    + buf->vbuf.field = V4L2_FIELD_TOP;
    vb2_set_plane_payload(&buf->vbuf.vb2_buf, 0, zr->buffer_size);
    vb2_buffer_done(&buf->vbuf.vb2_buf, VB2_BUF_STATE_DONE);
    zr->inuse[0] = NULL;
    @@ -928,6 +934,7 @@ static int zr_vb2_start_streaming(struct vb2_queue *vq, unsigned int count)
    zr->stat_com[j] = cpu_to_le32(1);
    zr->inuse[j] = NULL;
    }
    + zr->vbseq = 0;

    if (zr->map_mode != ZORAN_MAP_MODE_RAW) {
    pci_info(zr->pci_dev, "START JPG\n");
    @@ -1018,7 +1025,7 @@ int zoran_queue_init(struct zoran *zr, struct vb2_queue *vq, int dir)
    vq->dev = &zr->pci_dev->dev;
    vq->type = dir;

    - vq->io_modes = VB2_USERPTR | VB2_DMABUF | VB2_MMAP | VB2_READ | VB2_WRITE;
    + vq->io_modes = VB2_DMABUF | VB2_MMAP | VB2_READ | VB2_WRITE;
    vq->drv_priv = zr;
    vq->buf_struct_size = sizeof(struct zr_buffer);
    vq->ops = &zr_video_qops;
    --
    2.34.1
    \
     
     \ /
      Last update: 2022-03-30 14:21    [W:2.556 / U:0.092 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site