A WUSB device gets his address during the connection phase; later on, during the authenthication phase (driven from user space) we assign the final address. So we need to skip in hub_port_init() the actual setting of the address for WUSB devices.
Signed-off-by: Inaky Perez-Gonzalez <[EMAIL PROTECTED]> Index: linux.hg/drivers/usb/core/hub.c =================================================================== --- linux.hg.orig/drivers/usb/core/hub.c 2007-07-31 19:25:59.000000000 -0700 +++ linux.hg/drivers/usb/core/hub.c 2007-07-31 19:27:52.000000000 -0700 @@ -2336,27 +2336,33 @@ } #undef GET_DESCRIPTOR_BUFSIZE } + /* + * If device is WUSB, we already assigned an + * unauthorized address in the Connect Ack sequence; + * authorization will assign the final address. + */ + if (udev->wusb == 0) { + for (j = 0; j < SET_ADDRESS_TRIES; ++j) { + retval = hub_set_address(udev); + if (retval >= 0) + break; + msleep(200); + } + if (retval < 0) { + dev_err(&udev->dev, + "device not accepting address %d, error %d\n", + udev->devnum, retval); + goto fail; + } - for (j = 0; j < SET_ADDRESS_TRIES; ++j) { - retval = hub_set_address(udev); - if (retval >= 0) + /* cope with hardware quirkiness: + * - let SET_ADDRESS settle, some device hardware wants it + * - read ep0 maxpacket even for high and low speed, + */ + msleep(10); + if (USE_NEW_SCHEME(retry_counter)) break; - msleep(200); } - if (retval < 0) { - dev_err(&udev->dev, - "device not accepting address %d, error %d\n", - udev->devnum, retval); - goto fail; - } - - /* cope with hardware quirkiness: - * - let SET_ADDRESS settle, some device hardware wants it - * - read ep0 maxpacket even for high and low speed, - */ - msleep(10); - if (USE_NEW_SCHEME(retry_counter)) - break; retval = usb_get_device_descriptor(udev, 8); if (retval < 8) { @@ -2373,7 +2379,7 @@ if (retval) goto fail; - i = udev->descriptor.bMaxPacketSize0 == 0xff? + i = udev->descriptor.bMaxPacketSize0 == 0xff? /* wusb device? */ 512 : udev->descriptor.bMaxPacketSize0; if (le16_to_cpu(udev->ep0.desc.wMaxPacketSize) != i) { if (udev->speed != USB_SPEED_FULL || -- Inaky ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/ _______________________________________________ linux-usb-devel@lists.sourceforge.net To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-devel