summaryrefslogtreecommitdiffstats
path: root/drivers/media
diff options
context:
space:
mode:
authorFrank Schaefer <fschaefer.oss@googlemail.com>2014-01-12 13:24:24 -0300
committerMauro Carvalho Chehab <m.chehab@samsung.com>2014-01-14 14:32:04 -0200
commit5a620c7c1cd74064e75a525738e9410b8851fa96 (patch)
tree4e67bf85f8ed7561c6a35eb083ef7b47d8d695fe /drivers/media
parentf188da4395b85698d1a55e9fb278ea7e629fbe96 (diff)
downloadlinux-5a620c7c1cd74064e75a525738e9410b8851fa96.tar.gz
linux-5a620c7c1cd74064e75a525738e9410b8851fa96.tar.bz2
linux-5a620c7c1cd74064e75a525738e9410b8851fa96.zip
[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)
{
/*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);
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)
free the remaining resources */
if (dev->disconnected) {
- em28xx_release_resources(dev);
kfree(dev->alt_max_pkt_size_isoc);
goto exit;
}