diff --git a/src/add-ons/kernel/bus_managers/usb/BusManager.cpp b/src/add-ons/kernel/bus_managers/usb/BusManager.cpp index dbfc2f1643..95705a7f8d 100644 --- a/src/add-ons/kernel/bus_managers/usb/BusManager.cpp +++ b/src/add-ons/kernel/bus_managers/usb/BusManager.cpp @@ -135,7 +135,7 @@ BusManager::AllocateDevice(Hub *parent, uint8 port, usb_speed speed) } status_t result = B_ERROR; - for (int32 i = 0; i < 15; i++) { + for (int32 i = 0; i < 3; i++) { // Set the address of the device USB 1.1 spec p202 result = defaultPipe->SendRequest( USB_REQTYPE_STANDARD | USB_REQTYPE_DEVICE_OUT, // type @@ -223,7 +223,7 @@ BusManager::AllocateDevice(Hub *parent, uint8 port, usb_speed speed) TRACE(("USB BusManager: creating new device\n")); Device *device = new(std::nothrow) Device(parent, port, deviceDescriptor, - deviceAddress, speed); + deviceAddress, speed, false); if (!device) { TRACE_ERROR(("USB BusManager: no memory to allocate device\n")); FreeAddress(deviceAddress); diff --git a/src/add-ons/kernel/bus_managers/usb/Device.cpp b/src/add-ons/kernel/bus_managers/usb/Device.cpp index 9594deba3b..8d8d3177b7 100644 --- a/src/add-ons/kernel/bus_managers/usb/Device.cpp +++ b/src/add-ons/kernel/bus_managers/usb/Device.cpp @@ -11,11 +11,12 @@ Device::Device(Object *parent, int8 hubPort, usb_device_descriptor &desc, - int8 deviceAddress, usb_speed speed) + int8 deviceAddress, usb_speed speed, bool isRootHub) : Object(parent), fDeviceDescriptor(desc), fInitOK(false), fAvailable(true), + fIsRootHub(isRootHub), fConfigurations(NULL), fCurrentConfiguration(NULL), fSpeed(speed), @@ -372,7 +373,8 @@ Device::SetConfigurationAt(uint8 index) InitEndpoints(); // Wait some for the configuration being finished - snooze(USB_DELAY_SET_CONFIGURATION); + if (!fIsRootHub) + snooze(USB_DELAY_SET_CONFIGURATION); return B_OK; } diff --git a/src/add-ons/kernel/bus_managers/usb/Hub.cpp b/src/add-ons/kernel/bus_managers/usb/Hub.cpp index caa62cb56a..1f7d541cd3 100644 --- a/src/add-ons/kernel/bus_managers/usb/Hub.cpp +++ b/src/add-ons/kernel/bus_managers/usb/Hub.cpp @@ -13,7 +13,7 @@ Hub::Hub(Object *parent, int8 hubPort, usb_device_descriptor &desc, int8 deviceAddress, usb_speed speed, bool isRootHub) - : Device(parent, hubPort, desc, deviceAddress, speed), + : Device(parent, hubPort, desc, deviceAddress, speed, isRootHub), fInterruptPipe(NULL) { TRACE(("USB Hub %d: creating hub\n", DeviceAddress())); diff --git a/src/add-ons/kernel/bus_managers/usb/usb_p.h b/src/add-ons/kernel/bus_managers/usb/usb_p.h index 4c37648634..9bf7f3d3ec 100644 --- a/src/add-ons/kernel/bus_managers/usb/usb_p.h +++ b/src/add-ons/kernel/bus_managers/usb/usb_p.h @@ -414,7 +414,7 @@ public: Device(Object *parent, int8 hubPort, usb_device_descriptor &desc, int8 deviceAddress, - usb_speed speed); + usb_speed speed, bool isRootHub); virtual ~Device(); status_t InitCheck(); @@ -469,6 +469,7 @@ protected: private: bool fAvailable; + bool fIsRootHub; usb_configuration_info *fConfigurations; usb_configuration_info *fCurrentConfiguration; usb_speed fSpeed;