aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/usbvision/usbvision-video.c
diff options
context:
space:
mode:
authorHans Verkuil <hverkuil@xs4all.nl>2010-09-17 14:07:28 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2010-10-20 23:06:06 -0400
commit8403472f19fea7e7cec7899e998f38b899e59604 (patch)
treef23180ec9f6610bd3b416590beabc896798ec7fa /drivers/media/video/usbvision/usbvision-video.c
parent1f2052539666bd8b43ed26c9b1c3687628c49ecc (diff)
V4L/DVB: usbvision: remove BKL from usbvision
Removed the BKL from usbvision. There was an initialization bug as well where the i2c bus was registered twice. Although when the BKL was present no oops was generated, I did run into other i2c problems. Now that I protect against duplicate i2c registration that bug is now gone as well. But trying to disconnect the USB cable while someone is still using the device still leads to a crash. Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/video/usbvision/usbvision-video.c')
-rw-r--r--drivers/media/video/usbvision/usbvision-video.c8
1 files changed, 3 insertions, 5 deletions
diff --git a/drivers/media/video/usbvision/usbvision-video.c b/drivers/media/video/usbvision/usbvision-video.c
index c2690df33438..db6b828594f5 100644
--- a/drivers/media/video/usbvision/usbvision-video.c
+++ b/drivers/media/video/usbvision/usbvision-video.c
@@ -357,7 +357,7 @@ static int usbvision_v4l2_open(struct file *file)
357 357
358 PDEBUG(DBG_IO, "open"); 358 PDEBUG(DBG_IO, "open");
359 359
360 lock_kernel(); 360 mutex_lock(&usbvision->lock);
361 usbvision_reset_powerOffTimer(usbvision); 361 usbvision_reset_powerOffTimer(usbvision);
362 362
363 if (usbvision->user) 363 if (usbvision->user)
@@ -379,7 +379,6 @@ static int usbvision_v4l2_open(struct file *file)
379 379
380 /* If so far no errors then we shall start the camera */ 380 /* If so far no errors then we shall start the camera */
381 if (!errCode) { 381 if (!errCode) {
382 mutex_lock(&usbvision->lock);
383 if (usbvision->power == 0) { 382 if (usbvision->power == 0) {
384 usbvision_power_on(usbvision); 383 usbvision_power_on(usbvision);
385 usbvision_i2c_register(usbvision); 384 usbvision_i2c_register(usbvision);
@@ -408,14 +407,13 @@ static int usbvision_v4l2_open(struct file *file)
408 usbvision->initialized = 0; 407 usbvision->initialized = 0;
409 } 408 }
410 } 409 }
411 mutex_unlock(&usbvision->lock);
412 } 410 }
413 411
414 /* prepare queues */ 412 /* prepare queues */
415 usbvision_empty_framequeues(usbvision); 413 usbvision_empty_framequeues(usbvision);
416 414
417 PDEBUG(DBG_IO, "success"); 415 PDEBUG(DBG_IO, "success");
418 unlock_kernel(); 416 mutex_unlock(&usbvision->lock);
419 return errCode; 417 return errCode;
420} 418}
421 419
@@ -1645,8 +1643,8 @@ static int __devinit usbvision_probe(struct usb_interface *intf,
1645 usbvision->usb_bandwidth = 0; 1643 usbvision->usb_bandwidth = 0;
1646 usbvision->user = 0; 1644 usbvision->user = 0;
1647 usbvision->streaming = Stream_Off; 1645 usbvision->streaming = Stream_Off;
1648 usbvision_register_video(usbvision);
1649 usbvision_configure_video(usbvision); 1646 usbvision_configure_video(usbvision);
1647 usbvision_register_video(usbvision);
1650 mutex_unlock(&usbvision->lock); 1648 mutex_unlock(&usbvision->lock);
1651 1649
1652 usbvision_create_sysfs(usbvision->vdev); 1650 usbvision_create_sysfs(usbvision->vdev);