diff options
-rw-r--r-- | drivers/media/usb/em28xx/em28xx-cards.c | 12 | ||||
-rw-r--r-- | drivers/media/usb/em28xx/em28xx-video.c | 1 |
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 | }; |
2888 | EXPORT_SYMBOL_GPL(em28xx_release_resources); | 2892 | EXPORT_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 | } |