[media] em28xx: always call em28xx_release_resources() in the usb disconnect handler
authorFrank Schaefer <fschaefer.oss@googlemail.com>
Sun, 12 Jan 2014 16:24:24 +0000 (13:24 -0300)
committerMauro Carvalho Chehab <m.chehab@samsung.com>
Tue, 14 Jan 2014 16:32:04 +0000 (14:32 -0200)
When the usb device is disconnected, the resources are no longer available,
so there is no reason to keep them registered.

This will also fix the various sysfs group removal warnings which we can see
since kernel 3.13.

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 fa35a308ad67a359fb95220def30ca97695dfa88..3b332d527ccb8f8ec9a5257adec278ed265b84c9 100644 (file)
@@ -2876,6 +2876,8 @@ void em28xx_release_resources(struct em28xx *dev)
 {
        /*FIXME: I2C IR should be disconnected */
 
+       mutex_lock(&dev->lock);
+
        if (dev->def_i2c_bus)
                em28xx_i2c_unregister(dev, 1);
        em28xx_i2c_unregister(dev, 0);
@@ -2884,6 +2886,8 @@ void em28xx_release_resources(struct em28xx *dev)
 
        /* Mark device as unused */
        clear_bit(dev->devno, &em28xx_devused);
+
+       mutex_unlock(&dev->lock);
 };
 EXPORT_SYMBOL_GPL(em28xx_release_resources);
 
@@ -3386,13 +3390,7 @@ static void em28xx_usb_disconnect(struct usb_interface *interface)
 
        em28xx_close_extension(dev);
 
-       /* NOTE: must be called BEFORE the resources are released */
-
-       mutex_lock(&dev->lock);
-       if (!dev->users)
-               em28xx_release_resources(dev);
-
-       mutex_unlock(&dev->lock);
+       em28xx_release_resources(dev);
 
        if (!dev->users) {
                kfree(dev->alt_max_pkt_size_isoc);
index d8ca37abc917ac08a1df2f4d5463d5178baafb70..cda0dc3555d2e5b82c0c15aa3da10fc5d81908a1 100644 (file)
@@ -1959,7 +1959,6 @@ static int em28xx_v4l2_close(struct file *filp)
                   free the remaining resources */
 
                if (dev->disconnected) {
-                       em28xx_release_resources(dev);
                        kfree(dev->alt_max_pkt_size_isoc);
                        goto exit;
                }