]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/media/video/stk-webcam.c
Merge branch 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux...
[linux-2.6-omap-h63xx.git] / drivers / media / video / stk-webcam.c
index db69bc5556d6776c84a51c78f7460f927d04d350..e9eb6d754d5c85db037e9d41fa398a1e2589830a 100644 (file)
@@ -27,7 +27,6 @@
 #include <linux/kernel.h>
 #include <linux/errno.h>
 #include <linux/slab.h>
-#include <linux/kref.h>
 
 #include <linux/usb.h>
 #include <linux/mm.h>
@@ -560,7 +559,7 @@ static void stk_clean_iso(struct stk_camera *dev)
 
                urb = dev->isobufs[i].urb;
                if (urb) {
-                       if (atomic_read(&dev->urbs_used))
+                       if (atomic_read(&dev->urbs_used) && is_present(dev))
                                usb_kill_urb(urb);
                        usb_free_urb(urb);
                }
@@ -689,18 +688,14 @@ static int v4l_stk_release(struct inode *inode, struct file *fp)
 {
        struct stk_camera *dev = fp->private_data;
 
-       if (dev->owner != fp) {
-               usb_autopm_put_interface(dev->interface);
-               return 0;
+       if (dev->owner == fp) {
+               stk_stop_stream(dev);
+               stk_free_buffers(dev);
+               dev->owner = NULL;
        }
 
-       stk_stop_stream(dev);
-
-       stk_free_buffers(dev);
-
-       dev->owner = NULL;
-
-       usb_autopm_put_interface(dev->interface);
+       if(is_present(dev))
+               usb_autopm_put_interface(dev->interface);
 
        return 0;
 }
@@ -714,9 +709,6 @@ static ssize_t v4l_stk_read(struct file *fp, char __user *buf,
        struct stk_sio_buffer *sbuf;
        struct stk_camera *dev = fp->private_data;
 
-       if (dev == NULL)
-               return -EIO;
-
        if (!is_present(dev))
                return -EIO;
        if (dev->owner && dev->owner != fp)
@@ -773,9 +765,6 @@ static unsigned int v4l_stk_poll(struct file *fp, poll_table *wait)
 {
        struct stk_camera *dev = fp->private_data;
 
-       if (dev == NULL)
-               return -ENODEV;
-
        poll_wait(fp, &dev->wait_frame, wait);
 
        if (!is_present(dev))
@@ -1342,7 +1331,7 @@ static int stk_register_video_device(struct stk_camera *dev)
                STK_ERROR("v4l registration failed\n");
        else
                STK_INFO("Syntek USB2.0 Camera is now controlling video device"
-                       " /dev/video%d\n", dev->vdev.minor);
+                       " /dev/video%d\n", dev->vdev.num);
        return err;
 }
 
@@ -1436,8 +1425,8 @@ static void stk_camera_disconnect(struct usb_interface *interface)
        wake_up_interruptible(&dev->wait_frame);
        stk_remove_sysfs_files(&dev->vdev);
 
-       STK_INFO("Syntek USB2.0 Camera release resources"
-               "video device /dev/video%d\n", dev->vdev.minor);
+       STK_INFO("Syntek USB2.0 Camera release resources "
+               "video device /dev/video%d\n", dev->vdev.num);
 
        video_unregister_device(&dev->vdev);
 }