diff options
-rw-r--r-- | drivers/net/wireless/ath/ath6kl/htc_pipe.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath6kl/init.c | 13 |
2 files changed, 13 insertions, 2 deletions
diff --git a/drivers/net/wireless/ath/ath6kl/htc_pipe.c b/drivers/net/wireless/ath/ath6kl/htc_pipe.c index c02d9d34f74d..67aa924ed8b3 100644 --- a/drivers/net/wireless/ath/ath6kl/htc_pipe.c +++ b/drivers/net/wireless/ath/ath6kl/htc_pipe.c | |||
@@ -1168,7 +1168,7 @@ static int htc_wait_recv_ctrl_message(struct htc_target *target) | |||
1168 | 1168 | ||
1169 | if (count <= 0) { | 1169 | if (count <= 0) { |
1170 | ath6kl_warn("htc pipe control receive timeout!\n"); | 1170 | ath6kl_warn("htc pipe control receive timeout!\n"); |
1171 | return -ECOMM; | 1171 | return -ETIMEDOUT; |
1172 | } | 1172 | } |
1173 | 1173 | ||
1174 | return 0; | 1174 | return 0; |
diff --git a/drivers/net/wireless/ath/ath6kl/init.c b/drivers/net/wireless/ath/ath6kl/init.c index 8b01ec3d2b8c..4ad45bb3cf55 100644 --- a/drivers/net/wireless/ath/ath6kl/init.c +++ b/drivers/net/wireless/ath/ath6kl/init.c | |||
@@ -1658,7 +1658,18 @@ static int __ath6kl_init_hw_start(struct ath6kl *ar) | |||
1658 | * size. | 1658 | * size. |
1659 | */ | 1659 | */ |
1660 | ret = ath6kl_htc_wait_target(ar->htc_target); | 1660 | ret = ath6kl_htc_wait_target(ar->htc_target); |
1661 | if (ret) { | 1661 | |
1662 | if (ret == -ETIMEDOUT) { | ||
1663 | /* | ||
1664 | * Most likely USB target is in odd state after reboot and | ||
1665 | * needs a reset. A cold reset makes the whole device | ||
1666 | * disappear from USB bus and initialisation starts from | ||
1667 | * beginning. | ||
1668 | */ | ||
1669 | ath6kl_warn("htc wait target timed out, resetting device\n"); | ||
1670 | ath6kl_init_hw_reset(ar); | ||
1671 | goto err_power_off; | ||
1672 | } else if (ret) { | ||
1662 | ath6kl_err("htc wait target failed: %d\n", ret); | 1673 | ath6kl_err("htc wait target failed: %d\n", ret); |
1663 | goto err_power_off; | 1674 | goto err_power_off; |
1664 | } | 1675 | } |