[media] em28xx: move v4l2_device_disconnect() call from the core to the v4l extension
authorFrank Schaefer <fschaefer.oss@googlemail.com>
Sun, 12 Jan 2014 16:24:21 +0000 (13:24 -0300)
committerMauro Carvalho Chehab <m.chehab@samsung.com>
Tue, 14 Jan 2014 16:31:40 +0000 (14:31 -0200)
Signed-off-by: Frank Schäfer <fschaefer.oss@googlemail.com>
Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
drivers/media/usb/em28xx/em28xx-cards.c
drivers/media/usb/em28xx/em28xx-video.c

index ecf92d4..2f520a5 100644 (file)
@@ -3387,16 +3387,6 @@ static void em28xx_usb_disconnect(struct usb_interface *interface)
 
        flush_request_modules(dev);
 
-       mutex_lock(&dev->lock);
-
-       v4l2_device_disconnect(&dev->v4l2_dev);
-
-       if (dev->users)
-               em28xx_warn("device %s is open! Deregistration and memory deallocation are deferred on close.\n",
-                           video_device_node_name(dev->vdev));
-
-       mutex_unlock(&dev->lock);
-
        em28xx_close_extension(dev);
 
        /* NOTE: must be called BEFORE the resources are released */
index a5a665b..f5f716e 100644 (file)
@@ -1893,6 +1893,8 @@ static int em28xx_v4l2_fini(struct em28xx *dev)
                return 0;
        }
 
+       v4l2_device_disconnect(&dev->v4l2_dev);
+
        em28xx_uninit_usb_xfer(dev, EM28XX_ANALOG_MODE);
 
        if (dev->radio_dev) {
@@ -1921,6 +1923,9 @@ static int em28xx_v4l2_fini(struct em28xx *dev)
                dev->vdev = NULL;
        }
 
+       if (dev->users)
+               em28xx_warn("Device is open ! Deregistration and memory deallocation are deferred on close.\n");
+
        return 0;
 }