aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media
diff options
context:
space:
mode:
authorFrank Schaefer <fschaefer.oss@googlemail.com>2014-01-12 11:24:24 -0500
committerMauro Carvalho Chehab <m.chehab@samsung.com>2014-01-14 11:32:04 -0500
commit5a620c7c1cd74064e75a525738e9410b8851fa96 (patch)
tree4e67bf85f8ed7561c6a35eb083ef7b47d8d695fe /drivers/media
parentf188da4395b85698d1a55e9fb278ea7e629fbe96 (diff)
[media] em28xx: always call em28xx_release_resources() in the usb disconnect handler
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>
Diffstat (limited to 'drivers/media')
-rw-r--r--drivers/media/usb/em28xx/em28xx-cards.c12
-rw-r--r--drivers/media/usb/em28xx/em28xx-video.c1
2 files changed, 5 insertions, 8 deletions
diff --git a/drivers/media/usb/em28xx/em28xx-cards.c b/drivers/media/usb/em28xx/em28xx-cards.c
index fa35a308ad67..3b332d527ccb 100644
--- a/drivers/media/usb/em28xx/em28xx-cards.c
+++ b/drivers/media/usb/em28xx/em28xx-cards.c
@@ -2876,6 +2876,8 @@ void em28xx_release_resources(struct em28xx *dev)
2876{ 2876{
2877 /*FIXME: I2C IR should be disconnected */ 2877 /*FIXME: I2C IR should be disconnected */
2878 2878
2879 mutex_lock(&dev->lock);
2880
2879 if (dev->def_i2c_bus) 2881 if (dev->def_i2c_bus)
2880 em28xx_i2c_unregister(dev, 1); 2882 em28xx_i2c_unregister(dev, 1);
2881 em28xx_i2c_unregister(dev, 0); 2883 em28xx_i2c_unregister(dev, 0);
@@ -2884,6 +2886,8 @@ void em28xx_release_resources(struct em28xx *dev)
2884 2886
2885 /* Mark device as unused */ 2887 /* Mark device as unused */
2886 clear_bit(dev->devno, &em28xx_devused); 2888 clear_bit(dev->devno, &em28xx_devused);
2889
2890 mutex_unlock(&dev->lock);
2887}; 2891};
2888EXPORT_SYMBOL_GPL(em28xx_release_resources); 2892EXPORT_SYMBOL_GPL(em28xx_release_resources);
2889 2893
@@ -3386,13 +3390,7 @@ static void em28xx_usb_disconnect(struct usb_interface *interface)
3386 3390
3387 em28xx_close_extension(dev); 3391 em28xx_close_extension(dev);
3388 3392
3389 /* NOTE: must be called BEFORE the resources are released */ 3393 em28xx_release_resources(dev);
3390
3391 mutex_lock(&dev->lock);
3392 if (!dev->users)
3393 em28xx_release_resources(dev);
3394
3395 mutex_unlock(&dev->lock);
3396 3394
3397 if (!dev->users) { 3395 if (!dev->users) {
3398 kfree(dev->alt_max_pkt_size_isoc); 3396 kfree(dev->alt_max_pkt_size_isoc);
diff --git a/drivers/media/usb/em28xx/em28xx-video.c b/drivers/media/usb/em28xx/em28xx-video.c
index d8ca37abc917..cda0dc3555d2 100644
--- a/drivers/media/usb/em28xx/em28xx-video.c
+++ b/drivers/media/usb/em28xx/em28xx-video.c
@@ -1959,7 +1959,6 @@ static int em28xx_v4l2_close(struct file *filp)
1959 free the remaining resources */ 1959 free the remaining resources */
1960 1960
1961 if (dev->disconnected) { 1961 if (dev->disconnected) {
1962 em28xx_release_resources(dev);
1963 kfree(dev->alt_max_pkt_size_isoc); 1962 kfree(dev->alt_max_pkt_size_isoc);
1964 goto exit; 1963 goto exit;
1965 } 1964 }