diff --git a/drivers/net/wireless/ath/ath9k/hif_usb.c b/drivers/net/wireless/ath/ath9k/hif_usb.c index f5dda84..7730a5c 100644 --- a/drivers/net/wireless/ath/ath9k/hif_usb.c +++ b/drivers/net/wireless/ath/ath9k/hif_usb.c @@ -1124,7 +1124,7 @@ static void ath9k_hif_usb_firmware_cb(const struct firmware *fw, void *context) } release_firmware(fw); - hif_dev->flags |= HIF_USB_READY; + hif_dev->flags |= HIF_USB_FW_LOADED; complete(&hif_dev->fw_done); return; @@ -1281,7 +1281,7 @@ static void ath9k_hif_usb_disconnect(struct usb_interface *interface) wait_for_completion(&hif_dev->fw_done); - if (hif_dev->flags & HIF_USB_READY) { + if (hif_dev->flags & HIF_USB_FW_LOADED) { ath9k_htc_hw_deinit(hif_dev->htc_handle, unplugged); ath9k_htc_hw_free(hif_dev->htc_handle); ath9k_hif_usb_dev_deinit(hif_dev); @@ -1289,7 +1289,9 @@ static void ath9k_hif_usb_disconnect(struct usb_interface *interface) usb_set_intfdata(interface, NULL); - if (!unplugged && (hif_dev->flags & HIF_USB_START)) + /* If firmware was loaded we should drop it + * go back to first stage bootloader. */ + if (!unplugged && (hif_dev->flags & HIF_USB_FW_LOADED)) ath9k_hif_usb_reboot(udev); kfree(hif_dev); @@ -1326,7 +1328,7 @@ static int ath9k_hif_usb_resume(struct usb_interface *interface) if (ret) return ret; - if (hif_dev->flags & HIF_USB_READY) { + if (hif_dev->flags & HIF_USB_FW_LOADED) { /* request cached firmware during suspend/resume cycle */ ret = request_firmware(&fw, hif_dev->fw_name, &hif_dev->udev->dev); diff --git a/drivers/net/wireless/ath/ath9k/hif_usb.h b/drivers/net/wireless/ath/ath9k/hif_usb.h index 51496e7..d74697d 100644 --- a/drivers/net/wireless/ath/ath9k/hif_usb.h +++ b/drivers/net/wireless/ath/ath9k/hif_usb.h @@ -85,7 +85,7 @@ struct cmd_buf { }; #define HIF_USB_START BIT(0) -#define HIF_USB_READY BIT(1) +#define HIF_USB_FW_LOADED BIT(1) struct hif_device_usb { struct usb_device *udev; diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_init.c b/drivers/net/wireless/ath/ath9k/htc_drv_init.c index a47f5e0..3b202ff 100644 --- a/drivers/net/wireless/ath/ath9k/htc_drv_init.c +++ b/drivers/net/wireless/ath/ath9k/htc_drv_init.c @@ -846,6 +846,7 @@ static int ath9k_init_device(struct ath9k_htc_priv *priv, if (error != 0) goto err_rx; + ath9k_hw_disable(priv->ah); #ifdef CONFIG_MAC80211_LEDS /* must be initialized before ieee80211_register_hw */ priv->led_cdev.default_trigger = ieee80211_create_tpt_led_trigger(priv->hw,