diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-10-28 12:35:11 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-10-28 12:35:11 -0400 |
commit | 0851668fdd97e526b2a41f794b785c204dd3d3e0 (patch) | |
tree | 4ef7c20a8be8393006c6fe9627eb29dd30877d61 /drivers/media/video/cx88/cx88-blackbird.c | |
parent | 00ebb6382b8d9c7c15b5f8ad230670d8161d38dd (diff) | |
parent | 7655e594945289b418af39f6669fea4666a7b520 (diff) |
Merge branch 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6
* 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6: (505 commits)
[media] af9015: Fix max I2C message size when used with tda18271
[media] IR: initialize ir_raw_event in few more drivers
[media] Guard a divide in v4l1 compat layer
[media] imon: fix nomouse modprobe option
[media] imon: remove redundant change_protocol call
[media] imon: fix my egregious brown paper bag w/rdev/idev split
[media] cafe_ccic: Configure ov7670 correctly
[media] ov7670: allow configuration of image size, clock speed, and I/O method
[media] af9015: support for DigitalNow TinyTwin v3 [1f4d:9016]
[media] af9015: map DigitalNow TinyTwin v2 remote
[media] DigitalNow TinyTwin remote controller
[media] af9015: RC fixes and improvements
videodev2.h.xml: Update to reflect the latest changes at videodev2.h
[media] v4l: document new Bayer and monochrome pixel formats
[media] DocBook/v4l: Add missing formats used on gspca cpia1 and sn9c2028
[media] firedtv: add parameter to fake ca_system_ids in CA_INFO
[media] tm6000: fix a macro coding style issue
tm6000: Remove some ugly debug code
[media] Nova-S-Plus audio line input
[media] [RFC,1/1] V4L2: Use new CAP bits in existing RDS capable drivers
...
Diffstat (limited to 'drivers/media/video/cx88/cx88-blackbird.c')
-rw-r--r-- | drivers/media/video/cx88/cx88-blackbird.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/drivers/media/video/cx88/cx88-blackbird.c b/drivers/media/video/cx88/cx88-blackbird.c index 660b2a927feb..417d1d5c73c4 100644 --- a/drivers/media/video/cx88/cx88-blackbird.c +++ b/drivers/media/video/cx88/cx88-blackbird.c | |||
@@ -1057,7 +1057,7 @@ static int mpeg_open(struct file *file) | |||
1057 | 1057 | ||
1058 | dprintk( 1, "%s\n", __func__); | 1058 | dprintk( 1, "%s\n", __func__); |
1059 | 1059 | ||
1060 | lock_kernel(); | 1060 | mutex_lock(&dev->core->lock); |
1061 | 1061 | ||
1062 | /* Make sure we can acquire the hardware */ | 1062 | /* Make sure we can acquire the hardware */ |
1063 | drv = cx8802_get_driver(dev, CX88_MPEG_BLACKBIRD); | 1063 | drv = cx8802_get_driver(dev, CX88_MPEG_BLACKBIRD); |
@@ -1065,7 +1065,7 @@ static int mpeg_open(struct file *file) | |||
1065 | err = drv->request_acquire(drv); | 1065 | err = drv->request_acquire(drv); |
1066 | if(err != 0) { | 1066 | if(err != 0) { |
1067 | dprintk(1,"%s: Unable to acquire hardware, %d\n", __func__, err); | 1067 | dprintk(1,"%s: Unable to acquire hardware, %d\n", __func__, err); |
1068 | unlock_kernel(); | 1068 | mutex_unlock(&dev->core->lock);; |
1069 | return err; | 1069 | return err; |
1070 | } | 1070 | } |
1071 | } | 1071 | } |
@@ -1073,7 +1073,7 @@ static int mpeg_open(struct file *file) | |||
1073 | if (!atomic_read(&dev->core->mpeg_users) && blackbird_initialize_codec(dev) < 0) { | 1073 | if (!atomic_read(&dev->core->mpeg_users) && blackbird_initialize_codec(dev) < 0) { |
1074 | if (drv) | 1074 | if (drv) |
1075 | drv->request_release(drv); | 1075 | drv->request_release(drv); |
1076 | unlock_kernel(); | 1076 | mutex_unlock(&dev->core->lock); |
1077 | return -EINVAL; | 1077 | return -EINVAL; |
1078 | } | 1078 | } |
1079 | dprintk(1, "open dev=%s\n", video_device_node_name(vdev)); | 1079 | dprintk(1, "open dev=%s\n", video_device_node_name(vdev)); |
@@ -1083,7 +1083,7 @@ static int mpeg_open(struct file *file) | |||
1083 | if (NULL == fh) { | 1083 | if (NULL == fh) { |
1084 | if (drv) | 1084 | if (drv) |
1085 | drv->request_release(drv); | 1085 | drv->request_release(drv); |
1086 | unlock_kernel(); | 1086 | mutex_unlock(&dev->core->lock); |
1087 | return -ENOMEM; | 1087 | return -ENOMEM; |
1088 | } | 1088 | } |
1089 | file->private_data = fh; | 1089 | file->private_data = fh; |
@@ -1094,15 +1094,14 @@ static int mpeg_open(struct file *file) | |||
1094 | V4L2_BUF_TYPE_VIDEO_CAPTURE, | 1094 | V4L2_BUF_TYPE_VIDEO_CAPTURE, |
1095 | V4L2_FIELD_INTERLACED, | 1095 | V4L2_FIELD_INTERLACED, |
1096 | sizeof(struct cx88_buffer), | 1096 | sizeof(struct cx88_buffer), |
1097 | fh); | 1097 | fh, NULL); |
1098 | 1098 | ||
1099 | /* FIXME: locking against other video device */ | 1099 | /* FIXME: locking against other video device */ |
1100 | cx88_set_scale(dev->core, dev->width, dev->height, | 1100 | cx88_set_scale(dev->core, dev->width, dev->height, |
1101 | fh->mpegq.field); | 1101 | fh->mpegq.field); |
1102 | unlock_kernel(); | ||
1103 | 1102 | ||
1104 | atomic_inc(&dev->core->mpeg_users); | 1103 | atomic_inc(&dev->core->mpeg_users); |
1105 | 1104 | mutex_unlock(&dev->core->lock); | |
1106 | return 0; | 1105 | return 0; |
1107 | } | 1106 | } |
1108 | 1107 | ||
@@ -1120,8 +1119,11 @@ static int mpeg_release(struct file *file) | |||
1120 | videobuf_stop(&fh->mpegq); | 1119 | videobuf_stop(&fh->mpegq); |
1121 | 1120 | ||
1122 | videobuf_mmap_free(&fh->mpegq); | 1121 | videobuf_mmap_free(&fh->mpegq); |
1122 | |||
1123 | mutex_lock(&dev->core->lock); | ||
1123 | file->private_data = NULL; | 1124 | file->private_data = NULL; |
1124 | kfree(fh); | 1125 | kfree(fh); |
1126 | mutex_unlock(&dev->core->lock); | ||
1125 | 1127 | ||
1126 | /* Make sure we release the hardware */ | 1128 | /* Make sure we release the hardware */ |
1127 | drv = cx8802_get_driver(dev, CX88_MPEG_BLACKBIRD); | 1129 | drv = cx8802_get_driver(dev, CX88_MPEG_BLACKBIRD); |