diff options
Diffstat (limited to 'drivers/media/video/pwc/pwc-if.c')
-rw-r--r-- | drivers/media/video/pwc/pwc-if.c | 12 |
1 files changed, 5 insertions, 7 deletions
diff --git a/drivers/media/video/pwc/pwc-if.c b/drivers/media/video/pwc/pwc-if.c index d06e157657ac..e62beb4efdb4 100644 --- a/drivers/media/video/pwc/pwc-if.c +++ b/drivers/media/video/pwc/pwc-if.c | |||
@@ -163,7 +163,7 @@ static const struct v4l2_file_operations pwc_fops = { | |||
163 | .read = pwc_video_read, | 163 | .read = pwc_video_read, |
164 | .poll = pwc_video_poll, | 164 | .poll = pwc_video_poll, |
165 | .mmap = pwc_video_mmap, | 165 | .mmap = pwc_video_mmap, |
166 | .ioctl = pwc_video_ioctl, | 166 | .unlocked_ioctl = pwc_video_ioctl, |
167 | }; | 167 | }; |
168 | static struct video_device pwc_template = { | 168 | static struct video_device pwc_template = { |
169 | .name = "Philips Webcam", /* Filled in later */ | 169 | .name = "Philips Webcam", /* Filled in later */ |
@@ -1247,8 +1247,8 @@ static int pwc_video_close(struct file *file) | |||
1247 | 1247 | ||
1248 | PWC_DEBUG_OPEN(">> video_close called(vdev = 0x%p).\n", vdev); | 1248 | PWC_DEBUG_OPEN(">> video_close called(vdev = 0x%p).\n", vdev); |
1249 | 1249 | ||
1250 | lock_kernel(); | ||
1251 | pdev = video_get_drvdata(vdev); | 1250 | pdev = video_get_drvdata(vdev); |
1251 | mutex_lock(&pdev->modlock); | ||
1252 | if (pdev->vopen == 0) | 1252 | if (pdev->vopen == 0) |
1253 | PWC_DEBUG_MODULE("video_close() called on closed device?\n"); | 1253 | PWC_DEBUG_MODULE("video_close() called on closed device?\n"); |
1254 | 1254 | ||
@@ -1286,7 +1286,7 @@ static int pwc_video_close(struct file *file) | |||
1286 | if (device_hint[hint].pdev == pdev) | 1286 | if (device_hint[hint].pdev == pdev) |
1287 | device_hint[hint].pdev = NULL; | 1287 | device_hint[hint].pdev = NULL; |
1288 | } | 1288 | } |
1289 | unlock_kernel(); | 1289 | mutex_unlock(&pdev->modlock); |
1290 | 1290 | ||
1291 | return 0; | 1291 | return 0; |
1292 | } | 1292 | } |
@@ -1872,8 +1872,8 @@ static void usb_pwc_disconnect(struct usb_interface *intf) | |||
1872 | struct pwc_device *pdev; | 1872 | struct pwc_device *pdev; |
1873 | int hint; | 1873 | int hint; |
1874 | 1874 | ||
1875 | lock_kernel(); | ||
1876 | pdev = usb_get_intfdata (intf); | 1875 | pdev = usb_get_intfdata (intf); |
1876 | mutex_lock(&pdev->modlock); | ||
1877 | usb_set_intfdata (intf, NULL); | 1877 | usb_set_intfdata (intf, NULL); |
1878 | if (pdev == NULL) { | 1878 | if (pdev == NULL) { |
1879 | PWC_ERROR("pwc_disconnect() Called without private pointer.\n"); | 1879 | PWC_ERROR("pwc_disconnect() Called without private pointer.\n"); |
@@ -1898,9 +1898,7 @@ static void usb_pwc_disconnect(struct usb_interface *intf) | |||
1898 | wake_up_interruptible(&pdev->frameq); | 1898 | wake_up_interruptible(&pdev->frameq); |
1899 | /* Wait until device is closed */ | 1899 | /* Wait until device is closed */ |
1900 | if (pdev->vopen) { | 1900 | if (pdev->vopen) { |
1901 | mutex_lock(&pdev->modlock); | ||
1902 | pdev->unplugged = 1; | 1901 | pdev->unplugged = 1; |
1903 | mutex_unlock(&pdev->modlock); | ||
1904 | pwc_iso_stop(pdev); | 1902 | pwc_iso_stop(pdev); |
1905 | } else { | 1903 | } else { |
1906 | /* Device is closed, so we can safely unregister it */ | 1904 | /* Device is closed, so we can safely unregister it */ |
@@ -1914,7 +1912,7 @@ disconnect_out: | |||
1914 | device_hint[hint].pdev = NULL; | 1912 | device_hint[hint].pdev = NULL; |
1915 | } | 1913 | } |
1916 | 1914 | ||
1917 | unlock_kernel(); | 1915 | mutex_unlock(&pdev->modlock); |
1918 | } | 1916 | } |
1919 | 1917 | ||
1920 | 1918 | ||