upstream: [media] em28xx: move v4l2_device_disconnect() call from the core to the...
authorFrank Schaefer <fschaefer.oss@googlemail.com>
Sun, 12 Jan 2014 16:24:21 +0000 (13:24 -0300)
committerChanho Park <chanho61.park@samsung.com>
Tue, 18 Nov 2014 02:54:30 +0000 (11:54 +0900)
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 51759cb..414bb0d 100644 (file)
@@ -3214,16 +3214,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 e283d73..a6aba61 100644 (file)
@@ -1899,6 +1899,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) {
@@ -1927,6 +1929,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;
 }