Commit b9378fdb authored by Matthias Kaehlcke's avatar Matthias Kaehlcke Committed by Mauro Carvalho Chehab

V4L/DVB (5809): Use mutex instead of semaphore in Philips webcam driver

The Philips webcam driver uses a semaphore as mutex. Use the mutex API
instead of the (binary) semaphore.
--
Signed-off-by: default avatarMatthias Kaehlcke <matthias.kaehlcke@gmail.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@infradead.org>
parent 55c0d100
...@@ -1099,7 +1099,7 @@ static int pwc_video_open(struct inode *inode, struct file *file) ...@@ -1099,7 +1099,7 @@ static int pwc_video_open(struct inode *inode, struct file *file)
return -EBUSY; return -EBUSY;
} }
down(&pdev->modlock); mutex_lock(&pdev->modlock);
if (!pdev->usb_init) { if (!pdev->usb_init) {
PWC_DEBUG_OPEN("Doing first time initialization.\n"); PWC_DEBUG_OPEN("Doing first time initialization.\n");
pdev->usb_init = 1; pdev->usb_init = 1;
...@@ -1131,7 +1131,7 @@ static int pwc_video_open(struct inode *inode, struct file *file) ...@@ -1131,7 +1131,7 @@ static int pwc_video_open(struct inode *inode, struct file *file)
if (i < 0) { if (i < 0) {
PWC_DEBUG_OPEN("Failed to allocate buffers memory.\n"); PWC_DEBUG_OPEN("Failed to allocate buffers memory.\n");
pwc_free_buffers(pdev); pwc_free_buffers(pdev);
up(&pdev->modlock); mutex_unlock(&pdev->modlock);
return i; return i;
} }
...@@ -1172,7 +1172,7 @@ static int pwc_video_open(struct inode *inode, struct file *file) ...@@ -1172,7 +1172,7 @@ static int pwc_video_open(struct inode *inode, struct file *file)
if (i) { if (i) {
PWC_DEBUG_OPEN("Second attempt at set_video_mode failed.\n"); PWC_DEBUG_OPEN("Second attempt at set_video_mode failed.\n");
pwc_free_buffers(pdev); pwc_free_buffers(pdev);
up(&pdev->modlock); mutex_unlock(&pdev->modlock);
return i; return i;
} }
...@@ -1181,7 +1181,7 @@ static int pwc_video_open(struct inode *inode, struct file *file) ...@@ -1181,7 +1181,7 @@ static int pwc_video_open(struct inode *inode, struct file *file)
PWC_DEBUG_OPEN("Failed to init ISOC stuff = %d.\n", i); PWC_DEBUG_OPEN("Failed to init ISOC stuff = %d.\n", i);
pwc_isoc_cleanup(pdev); pwc_isoc_cleanup(pdev);
pwc_free_buffers(pdev); pwc_free_buffers(pdev);
up(&pdev->modlock); mutex_unlock(&pdev->modlock);
return i; return i;
} }
...@@ -1191,7 +1191,7 @@ static int pwc_video_open(struct inode *inode, struct file *file) ...@@ -1191,7 +1191,7 @@ static int pwc_video_open(struct inode *inode, struct file *file)
pdev->vopen++; pdev->vopen++;
file->private_data = vdev; file->private_data = vdev;
up(&pdev->modlock); mutex_unlock(&pdev->modlock);
PWC_DEBUG_OPEN("<< video_open() returns 0.\n"); PWC_DEBUG_OPEN("<< video_open() returns 0.\n");
return 0; return 0;
} }
...@@ -1685,7 +1685,7 @@ static int usb_pwc_probe(struct usb_interface *intf, const struct usb_device_id ...@@ -1685,7 +1685,7 @@ static int usb_pwc_probe(struct usb_interface *intf, const struct usb_device_id
pdev->angle_range.tilt_max = 2500; pdev->angle_range.tilt_max = 2500;
} }
init_MUTEX(&pdev->modlock); mutex_init(&pdev->modlock);
spin_lock_init(&pdev->ptrlock); spin_lock_init(&pdev->ptrlock);
pdev->udev = udev; pdev->udev = udev;
......
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
#include <linux/wait.h> #include <linux/wait.h>
#include <linux/smp_lock.h> #include <linux/smp_lock.h>
#include <linux/version.h> #include <linux/version.h>
#include <asm/semaphore.h> #include <linux/mutex.h>
#include <asm/errno.h> #include <asm/errno.h>
#include <linux/videodev.h> #include <linux/videodev.h>
#include <media/v4l2-common.h> #include <media/v4l2-common.h>
...@@ -244,7 +244,7 @@ struct pwc_device ...@@ -244,7 +244,7 @@ struct pwc_device
int image_read_pos; /* In case we read data in pieces, keep track of were we are in the imagebuffer */ int image_read_pos; /* In case we read data in pieces, keep track of were we are in the imagebuffer */
int image_used[MAX_IMAGES]; /* For MCAPTURE and SYNC */ int image_used[MAX_IMAGES]; /* For MCAPTURE and SYNC */
struct semaphore modlock; /* to prevent races in video_open(), etc */ struct mutex modlock; /* to prevent races in video_open(), etc */
spinlock_t ptrlock; /* for manipulating the buffer pointers */ spinlock_t ptrlock; /* for manipulating the buffer pointers */
/*** motorized pan/tilt feature */ /*** motorized pan/tilt feature */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment