libertas: reset usb device if boot2 init command fails

Marcelo Tosatti mtosatti at redhat.unroutablecom
Tue Jan 2 10:59:19 EST 2007


Commit:     b0aecad50fa99d3a35740eca6456704191df4841
Parent:     917285ef45c729d175296b0ed22cc7fbf67f5b51
commit b0aecad50fa99d3a35740eca6456704191df4841
Author:     Marcelo Tosatti <mtosatti at redhat.com>
AuthorDate: Sat Dec 23 22:32:02 2006 -0200
Commit:     Andres Salomon <dilinger at debian.org>
CommitDate: Tue Jan 2 10:31:22 2007 -0500

    libertas: reset usb device if boot2 init command fails
    
    Still getting errors from boot2 init command: reset and retry
    in such case.
    
    Signed-off-by: Marcelo Tosatti <mtosatti at redhat.com>
    (cherry picked from ba1090a33c573c003eb1127c7db16dc71e720306 commit)
---
 drivers/net/wireless/libertas/if_usb.c |   33 ++++++++++++++++++++++++--------
 1 files changed, 25 insertions(+), 8 deletions(-)

diff --git a/drivers/net/wireless/libertas/if_usb.c b/drivers/net/wireless/libertas/if_usb.c
index 5036fce..9a7e65a 100644
--- a/drivers/net/wireless/libertas/if_usb.c
+++ b/drivers/net/wireless/libertas/if_usb.c
@@ -912,6 +912,20 @@ static int if_prog_firmware(wlan_private
 	return WLAN_STATUS_SUCCESS;
 }
 
+static int libertas_do_reset(wlan_private *priv)
+{
+	int ret;
+	struct usb_card_rec *cardp = priv->wlan_dev.card;
+
+	ret = usb_reset_device(cardp->udev);
+	if (!ret) {
+		msleep(10);
+		reset_device(priv);
+		msleep(10);
+	}
+	return ret;
+}
+
 /** 
  *  @brief This function download fw
  *  @param priv		pointer to wlan_private
@@ -921,10 +935,11 @@ int libertas_sbi_prog_firmware(wlan_priv
 {
 	struct usb_card_rec *cardp = priv->wlan_dev.card;
 	int i = 0;
-	int reset_count = 10;
+	static int reset_count = 10;
 
 	ENTER();
 
+restart:
 	if (if_usb_submit_rx_urb_fwload(priv) < 0) {
 		dprintk(1, "URB submission is failed\n");
 		LEAVE();
@@ -945,11 +960,15 @@ #ifdef SUPPORT_BOOT_COMMAND
 		} while (cardp->BootCMDResp == 0 && j < 10);
 	} while (cardp->BootCMDResp == 0 && i < 5);
 
-	if (cardp->BootCMDResp == 0)
+	if (cardp->BootCMDResp == 0) {
+		if (--reset_count >= 0) {
+			libertas_do_reset(priv);
+			goto restart;
+		}
 		return WLAN_STATUS_FAILURE;
+	}
 #endif
 
-restart:
 	i = 0;
 	priv->adapter->fw_ready = 0;
 
@@ -973,13 +992,11 @@ restart:
 
 	if (!cardp->FwDnldOver) {
 		printk(KERN_INFO "Failed to load fw, resetting device!\n");
-		reset_count--;
-		if (!usb_reset_device(cardp->udev) && reset_count >= 0) {
-			msleep(10);
-			reset_device(priv);
-			msleep(10);
+		if (--reset_count >= 0) {
+			libertas_do_reset(priv);
 			goto restart;
 		}
+
 		printk(KERN_INFO "FW download failure, time = %d ms\n", i * 100);
 		LEAVE();
 		return WLAN_STATUS_FAILURE;


More information about the Commits-kernel mailing list