aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/cx88/cx88-blackbird.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2010-10-28 12:35:11 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2010-10-28 12:35:11 -0400
commit0851668fdd97e526b2a41f794b785c204dd3d3e0 (patch)
tree4ef7c20a8be8393006c6fe9627eb29dd30877d61 /drivers/media/video/cx88/cx88-blackbird.c
parent00ebb6382b8d9c7c15b5f8ad230670d8161d38dd (diff)
parent7655e594945289b418af39f6669fea4666a7b520 (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.c16
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);