Commit 44af3442 authored by Kalle Valo's avatar Kalle Valo

ath6kl: cold reset target after host warm boot

Julien reported that ar6004 usb device fails to initialise
after host has been rebooted and power is still on for the ar6004 device. He
found out that doing a cold reset fixes the issue.

I wasn't sure what would be the best way to detect if target needs a reset so I
settled on checking a timeout from htc_wait_recv_ctrl_message().
Reported-by: default avatarJulien Massot <jmassot@aldebaran-robotics.com>
Tested-by: default avatarJulien Massot <jmassot@aldebaran-robotics.com>
Signed-off-by: default avatarKalle Valo <kvalo@qca.qualcomm.com>
parent 4e1609c9
......@@ -1168,7 +1168,7 @@ static int htc_wait_recv_ctrl_message(struct htc_target *target)
if (count <= 0) {
ath6kl_warn("htc pipe control receive timeout!\n");
return -ECOMM;
return -ETIMEDOUT;
}
return 0;
......
......@@ -1658,7 +1658,18 @@ static int __ath6kl_init_hw_start(struct ath6kl *ar)
* size.
*/
ret = ath6kl_htc_wait_target(ar->htc_target);
if (ret) {
if (ret == -ETIMEDOUT) {
/*
* Most likely USB target is in odd state after reboot and
* needs a reset. A cold reset makes the whole device
* disappear from USB bus and initialisation starts from
* beginning.
*/
ath6kl_warn("htc wait target timed out, resetting device\n");
ath6kl_init_hw_reset(ar);
goto err_power_off;
} else if (ret) {
ath6kl_err("htc wait target failed: %d\n", ret);
goto err_power_off;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment