|
@@ -820,14 +820,11 @@ static int vidioc_s_fmt_vid_cap(struct file *file, void *priv,
|
|
|
struct v4l2_format *f)
|
|
|
{
|
|
|
struct vivi_dev *dev = video_drvdata(file);
|
|
|
- struct videobuf_queue *q = &dev->vb_vidq;
|
|
|
|
|
|
int ret = vidioc_try_fmt_vid_cap(file, priv, f);
|
|
|
if (ret < 0)
|
|
|
return ret;
|
|
|
|
|
|
- mutex_lock(&q->vb_lock);
|
|
|
-
|
|
|
if (vivi_is_generating(dev)) {
|
|
|
dprintk(dev, 1, "%s device busy\n", __func__);
|
|
|
ret = -EBUSY;
|
|
@@ -840,7 +837,6 @@ static int vidioc_s_fmt_vid_cap(struct file *file, void *priv,
|
|
|
dev->vb_vidq.field = f->fmt.pix.field;
|
|
|
ret = 0;
|
|
|
out:
|
|
|
- mutex_unlock(&q->vb_lock);
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
@@ -1086,7 +1082,7 @@ static const struct v4l2_file_operations vivi_fops = {
|
|
|
.release = vivi_close,
|
|
|
.read = vivi_read,
|
|
|
.poll = vivi_poll,
|
|
|
- .ioctl = video_ioctl2, /* V4L2 ioctl handler */
|
|
|
+ .unlocked_ioctl = video_ioctl2, /* V4L2 ioctl handler */
|
|
|
.mmap = vivi_mmap,
|
|
|
};
|
|
|
|
|
@@ -1173,19 +1169,19 @@ static int __init vivi_create_instance(int inst)
|
|
|
dev->saturation = 127;
|
|
|
dev->hue = 0;
|
|
|
|
|
|
+ /* initialize locks */
|
|
|
+ spin_lock_init(&dev->slock);
|
|
|
+ mutex_init(&dev->mutex);
|
|
|
+
|
|
|
videobuf_queue_vmalloc_init(&dev->vb_vidq, &vivi_video_qops,
|
|
|
NULL, &dev->slock, V4L2_BUF_TYPE_VIDEO_CAPTURE,
|
|
|
V4L2_FIELD_INTERLACED,
|
|
|
- sizeof(struct vivi_buffer), dev, NULL);
|
|
|
+ sizeof(struct vivi_buffer), dev, &dev->mutex);
|
|
|
|
|
|
/* init video dma queues */
|
|
|
INIT_LIST_HEAD(&dev->vidq.active);
|
|
|
init_waitqueue_head(&dev->vidq.wq);
|
|
|
|
|
|
- /* initialize locks */
|
|
|
- spin_lock_init(&dev->slock);
|
|
|
- mutex_init(&dev->mutex);
|
|
|
-
|
|
|
ret = -ENOMEM;
|
|
|
vfd = video_device_alloc();
|
|
|
if (!vfd)
|
|
@@ -1194,6 +1190,7 @@ static int __init vivi_create_instance(int inst)
|
|
|
*vfd = vivi_template;
|
|
|
vfd->debug = debug;
|
|
|
vfd->v4l2_dev = &dev->v4l2_dev;
|
|
|
+ vfd->lock = &dev->mutex;
|
|
|
|
|
|
ret = video_register_device(vfd, VFL_TYPE_GRABBER, video_nr);
|
|
|
if (ret < 0)
|