Browse Source

rt2x00: use timeout in rt2x00usb_vendor_request

Use provided timeout value in rt2x00usb_vendor_request() instead
of iterating REGISTER_BUSY_COUNT times.

Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Stanislaw Gruszka 10 years ago
parent
commit
ad92bc9e8e
1 changed files with 6 additions and 10 deletions
  1. 6 10
      drivers/net/wireless/rt2x00/rt2x00usb.c

+ 6 - 10
drivers/net/wireless/rt2x00/rt2x00usb.c

@@ -42,31 +42,27 @@ int rt2x00usb_vendor_request(struct rt2x00_dev *rt2x00dev,
 {
 {
 	struct usb_device *usb_dev = to_usb_device_intf(rt2x00dev->dev);
 	struct usb_device *usb_dev = to_usb_device_intf(rt2x00dev->dev);
 	int status;
 	int status;
-	unsigned int i;
 	unsigned int pipe =
 	unsigned int pipe =
 	    (requesttype == USB_VENDOR_REQUEST_IN) ?
 	    (requesttype == USB_VENDOR_REQUEST_IN) ?
 	    usb_rcvctrlpipe(usb_dev, 0) : usb_sndctrlpipe(usb_dev, 0);
 	    usb_rcvctrlpipe(usb_dev, 0) : usb_sndctrlpipe(usb_dev, 0);
+	unsigned long expire = jiffies + msecs_to_jiffies(timeout);
 
 
 	if (!test_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags))
 	if (!test_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags))
 		return -ENODEV;
 		return -ENODEV;
 
 
-	for (i = 0; i < REGISTER_BUSY_COUNT; i++) {
+	do {
 		status = usb_control_msg(usb_dev, pipe, request, requesttype,
 		status = usb_control_msg(usb_dev, pipe, request, requesttype,
 					 value, offset, buffer, buffer_length,
 					 value, offset, buffer, buffer_length,
-					 timeout);
+					 timeout / 2);
 		if (status >= 0)
 		if (status >= 0)
 			return 0;
 			return 0;
 
 
-		/*
-		 * Check for errors
-		 * -ENODEV: Device has disappeared, no point continuing.
-		 * All other errors: Try again.
-		 */
-		else if (status == -ENODEV) {
+		if (status == -ENODEV) {
+			/* Device has disappeared. */
 			clear_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags);
 			clear_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags);
 			break;
 			break;
 		}
 		}
-	}
+	} while (time_before(jiffies, expire));
 
 
 	/* If the port is powered down, we get a -EPROTO error, and this
 	/* If the port is powered down, we get a -EPROTO error, and this
 	 * leads to a endless loop. So just say that the device is gone.
 	 * leads to a endless loop. So just say that the device is gone.