summaryrefslogtreecommitdiff
path: root/libre-testing/linux-libre/ath9k_htc-fix-target-is-unresponsive.patch
blob: 3ba839940a6477c37fda4cf689f364b70ccea33f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
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,