libertas: improve reliability of firmware reloading on USB
authorDavid Woodhouse <dwmw2@infradead.org>
Mon, 10 Dec 2007 23:53:34 +0000 (18:53 -0500)
committerDavid S. Miller <davem@davemloft.net>
Mon, 28 Jan 2008 23:06:39 +0000 (15:06 -0800)
Increase the delay between issuing the RESET command and the usb reset,
and be prepared to discard more than one 'normal' packet from it before
it resets.

Signed-off-by: David Woodhouse <dwmw2@infradead.org>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/libertas/if_usb.c

index 8ff57a6..0a37950 100644 (file)
@@ -389,9 +389,9 @@ static int if_usb_reset_device(struct usb_card_rec *cardp)
        cmd->params.reset.action = cpu_to_le16(CMD_ACT_HALT);
        usb_tx_block(cardp, cardp->bulk_out_buffer, 4 + S_DS_GEN + sizeof(struct cmd_ds_802_11_reset));
 
-       msleep(10);
+       msleep(100);
        ret = usb_reset_device(cardp->udev);
-       msleep(10);
+       msleep(100);
 
        lbs_deb_leave_args(LBS_DEB_USB, "ret %d", ret);
 
@@ -500,7 +500,7 @@ static void if_usb_receive_fwload(struct urb *urb)
                return;
        }
 
-       if (cardp->bootcmdresp == 0) {
+       if (cardp->bootcmdresp <= 0) {
                memcpy (&bootcmdresp, skb->data + IPFIELD_ALIGN_OFFSET,
                        sizeof(bootcmdresp));
                if (le16_to_cpu(cardp->udev->descriptor.bcdDevice) < 0x3106) {