diff options
Diffstat (limited to 'drivers/media/common/saa7146_fops.c')
| -rw-r--r-- | drivers/media/common/saa7146_fops.c | 8 |
1 files changed, 2 insertions, 6 deletions
diff --git a/drivers/media/common/saa7146_fops.c b/drivers/media/common/saa7146_fops.c index e3fedc60fe77..1bd3dd762c6b 100644 --- a/drivers/media/common/saa7146_fops.c +++ b/drivers/media/common/saa7146_fops.c | |||
| @@ -15,18 +15,15 @@ int saa7146_res_get(struct saa7146_fh *fh, unsigned int bit) | |||
| 15 | } | 15 | } |
| 16 | 16 | ||
| 17 | /* is it free? */ | 17 | /* is it free? */ |
| 18 | mutex_lock(&dev->lock); | ||
| 19 | if (vv->resources & bit) { | 18 | if (vv->resources & bit) { |
| 20 | DEB_D(("locked! vv->resources:0x%02x, we want:0x%02x\n",vv->resources,bit)); | 19 | DEB_D(("locked! vv->resources:0x%02x, we want:0x%02x\n",vv->resources,bit)); |
| 21 | /* no, someone else uses it */ | 20 | /* no, someone else uses it */ |
| 22 | mutex_unlock(&dev->lock); | ||
| 23 | return 0; | 21 | return 0; |
| 24 | } | 22 | } |
| 25 | /* it's free, grab it */ | 23 | /* it's free, grab it */ |
| 26 | fh->resources |= bit; | 24 | fh->resources |= bit; |
| 27 | vv->resources |= bit; | 25 | vv->resources |= bit; |
| 28 | DEB_D(("res: get 0x%02x, cur:0x%02x\n",bit,vv->resources)); | 26 | DEB_D(("res: get 0x%02x, cur:0x%02x\n",bit,vv->resources)); |
| 29 | mutex_unlock(&dev->lock); | ||
| 30 | return 1; | 27 | return 1; |
| 31 | } | 28 | } |
| 32 | 29 | ||
| @@ -37,11 +34,9 @@ void saa7146_res_free(struct saa7146_fh *fh, unsigned int bits) | |||
| 37 | 34 | ||
| 38 | BUG_ON((fh->resources & bits) != bits); | 35 | BUG_ON((fh->resources & bits) != bits); |
| 39 | 36 | ||
| 40 | mutex_lock(&dev->lock); | ||
| 41 | fh->resources &= ~bits; | 37 | fh->resources &= ~bits; |
| 42 | vv->resources &= ~bits; | 38 | vv->resources &= ~bits; |
| 43 | DEB_D(("res: put 0x%02x, cur:0x%02x\n",bits,vv->resources)); | 39 | DEB_D(("res: put 0x%02x, cur:0x%02x\n",bits,vv->resources)); |
| 44 | mutex_unlock(&dev->lock); | ||
| 45 | } | 40 | } |
| 46 | 41 | ||
| 47 | 42 | ||
| @@ -396,7 +391,7 @@ static const struct v4l2_file_operations video_fops = | |||
| 396 | .write = fops_write, | 391 | .write = fops_write, |
| 397 | .poll = fops_poll, | 392 | .poll = fops_poll, |
| 398 | .mmap = fops_mmap, | 393 | .mmap = fops_mmap, |
| 399 | .ioctl = video_ioctl2, | 394 | .unlocked_ioctl = video_ioctl2, |
| 400 | }; | 395 | }; |
| 401 | 396 | ||
| 402 | static void vv_callback(struct saa7146_dev *dev, unsigned long status) | 397 | static void vv_callback(struct saa7146_dev *dev, unsigned long status) |
| @@ -505,6 +500,7 @@ int saa7146_register_device(struct video_device **vid, struct saa7146_dev* dev, | |||
| 505 | vfd->fops = &video_fops; | 500 | vfd->fops = &video_fops; |
| 506 | vfd->ioctl_ops = &dev->ext_vv_data->ops; | 501 | vfd->ioctl_ops = &dev->ext_vv_data->ops; |
| 507 | vfd->release = video_device_release; | 502 | vfd->release = video_device_release; |
| 503 | vfd->lock = &dev->v4l2_lock; | ||
| 508 | vfd->tvnorms = 0; | 504 | vfd->tvnorms = 0; |
| 509 | for (i = 0; i < dev->ext_vv_data->num_stds; i++) | 505 | for (i = 0; i < dev->ext_vv_data->num_stds; i++) |
| 510 | vfd->tvnorms |= dev->ext_vv_data->stds[i].id; | 506 | vfd->tvnorms |= dev->ext_vv_data->stds[i].id; |
