aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/ath/ar9170/usb.c
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2010-06-02 14:15:10 +0200
committerTakashi Iwai <tiwai@suse.de>2010-06-02 14:15:10 +0200
commite4caa8bab3862a7694ab7c6dfede223227ad7fc5 (patch)
tree9fa537a72f00f6b4f86c2da7be2e9554304a8ec4 /drivers/net/wireless/ath/ar9170/usb.c
parent9f75c1b12c5ef392ddcea575b13560842c28b1b3 (diff)
parentedb39935c8b19fcd9a8f619d0bc1e9d04594cd2b (diff)
downloadlinux-e4caa8bab3862a7694ab7c6dfede223227ad7fc5.tar.gz
Merge branch 'master' of git.alsa-project.org:alsa-kernel into fix/hda
Diffstat (limited to 'drivers/net/wireless/ath/ar9170/usb.c')
-rw-r--r--drivers/net/wireless/ath/ar9170/usb.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/drivers/net/wireless/ath/ar9170/usb.c b/drivers/net/wireless/ath/ar9170/usb.c
index 82ab532a4923..a93dc18a45c3 100644
--- a/drivers/net/wireless/ath/ar9170/usb.c
+++ b/drivers/net/wireless/ath/ar9170/usb.c
@@ -739,17 +739,27 @@ err_out:
static void ar9170_usb_firmware_failed(struct ar9170_usb *aru)
{
struct device *parent = aru->udev->dev.parent;
+ struct usb_device *udev;
+
+ /*
+ * Store a copy of the usb_device pointer locally.
+ * This is because device_release_driver initiates
+ * ar9170_usb_disconnect, which in turn frees our
+ * driver context (aru).
+ */
+ udev = aru->udev;
complete(&aru->firmware_loading_complete);
/* unbind anything failed */
if (parent)
device_lock(parent);
- device_release_driver(&aru->udev->dev);
+
+ device_release_driver(&udev->dev);
if (parent)
device_unlock(parent);
- usb_put_dev(aru->udev);
+ usb_put_dev(udev);
}
static void ar9170_usb_firmware_finish(const struct firmware *fw, void *context)