summaryrefslogtreecommitdiff
path: root/linux/drivers/media/video/tvmixer.c
diff options
context:
space:
mode:
Diffstat (limited to 'linux/drivers/media/video/tvmixer.c')
-rw-r--r--linux/drivers/media/video/tvmixer.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/linux/drivers/media/video/tvmixer.c b/linux/drivers/media/video/tvmixer.c
index d7b931fd3..fd2e902ea 100644
--- a/linux/drivers/media/video/tvmixer.c
+++ b/linux/drivers/media/video/tvmixer.c
@@ -9,6 +9,7 @@
#include <linux/errno.h>
#include <linux/slab.h>
#include <linux/i2c.h>
+#include <linux/smp_lock.h>
#include "compat.h"
#include <linux/videodev.h>
#include <linux/init.h>
@@ -16,7 +17,6 @@
#include <linux/sound.h>
#include <linux/soundcard.h>
-#include <asm/semaphore.h>
#include <asm/uaccess.h>
#define DEV_MAX 4
@@ -183,6 +183,7 @@ static int tvmixer_open(struct inode *inode, struct file *file)
struct TVMIXER *mix = NULL;
struct i2c_client *client = NULL;
+ lock_kernel();
for (i = 0; i < DEV_MAX; i++) {
if (devices[i].minor == minor) {
mix = devices+i;
@@ -191,13 +192,16 @@ static int tvmixer_open(struct inode *inode, struct file *file)
}
}
- if (NULL == client)
+ if (NULL == client) {
+ unlock_kernel();
return -ENODEV;
+ }
/* lock bttv in memory while the mixer is in use */
file->private_data = mix;
if (client->adapter->owner)
try_module_get(client->adapter->owner);
+ unlock_kernel();
return 0;
}