diff --git a/src/add-ons/kernel/bus_managers/usb/BusManager.cpp b/src/add-ons/kernel/bus_managers/usb/BusManager.cpp index 4c85750873..dbfc2f1643 100644 --- a/src/add-ons/kernel/bus_managers/usb/BusManager.cpp +++ b/src/add-ons/kernel/bus_managers/usb/BusManager.cpp @@ -204,7 +204,7 @@ BusManager::AllocateDevice(Hub *parent, uint8 port, usb_speed speed) if (deviceDescriptor.device_class == 0x09) { TRACE(("USB BusManager: creating new hub\n")); Hub *hub = new(std::nothrow) Hub(parent, port, deviceDescriptor, - deviceAddress, speed); + deviceAddress, speed, false); if (!hub) { TRACE_ERROR(("USB BusManager: no memory to allocate hub\n")); FreeAddress(deviceAddress); diff --git a/src/add-ons/kernel/bus_managers/usb/Hub.cpp b/src/add-ons/kernel/bus_managers/usb/Hub.cpp index bb74a15eab..caa62cb56a 100644 --- a/src/add-ons/kernel/bus_managers/usb/Hub.cpp +++ b/src/add-ons/kernel/bus_managers/usb/Hub.cpp @@ -12,7 +12,7 @@ Hub::Hub(Object *parent, int8 hubPort, usb_device_descriptor &desc, - int8 deviceAddress, usb_speed speed) + int8 deviceAddress, usb_speed speed, bool isRootHub) : Device(parent, hubPort, desc, deviceAddress, speed), fInterruptPipe(NULL) { @@ -71,7 +71,8 @@ Hub::Hub(Object *parent, int8 hubPort, usb_device_descriptor &desc, InterruptCallback, this); // Wait some time before powering up the ports - snooze(USB_DELAY_HUB_POWER_UP); + if (!isRootHub) + snooze(USB_DELAY_HUB_POWER_UP); // Enable port power on all ports for (int32 i = 0; i < fHubDescriptor.num_ports; i++) { 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 ad0f965abd..4c37648634 100644 --- a/src/add-ons/kernel/bus_managers/usb/usb_p.h +++ b/src/add-ons/kernel/bus_managers/usb/usb_p.h @@ -483,7 +483,7 @@ public: Hub(Object *parent, int8 hubPort, usb_device_descriptor &desc, int8 deviceAddress, - usb_speed speed); + usb_speed speed, bool isRootHub); virtual ~Hub(); virtual status_t Changed(change_item **changeList, diff --git a/src/add-ons/kernel/bus_managers/usb/usbspec_p.h b/src/add-ons/kernel/bus_managers/usb/usbspec_p.h index 04e42610e8..11cd58c132 100644 --- a/src/add-ons/kernel/bus_managers/usb/usbspec_p.h +++ b/src/add-ons/kernel/bus_managers/usb/usbspec_p.h @@ -26,7 +26,6 @@ #define USB_DELAY_SET_ADDRESS_RETRY 200000 #define USB_DELAY_SET_ADDRESS 10000 #define USB_DELAY_SET_CONFIGURATION 50000 -#define USB_DELAY_FIRST_EXPLORE 5000000 #define USB_DELAY_HUB_EXPLORE 1000000 // For bandwidth calculation diff --git a/src/add-ons/kernel/busses/usb/ehci_rh.cpp b/src/add-ons/kernel/busses/usb/ehci_rh.cpp index 2d5f3480a1..3c47adb6c8 100644 --- a/src/add-ons/kernel/busses/usb/ehci_rh.cpp +++ b/src/add-ons/kernel/busses/usb/ehci_rh.cpp @@ -76,7 +76,7 @@ static ehci_root_hub_configuration_s sEHCIRootHubConfig = USB_DESCRIPTOR_HUB, // Descriptor type 0x0f, // Number of ports 0x0000, // Hub characteristics - 50, // Power on to power good (in 2ms units) + 0, // Power on to power good (in 2ms units) 0, // Maximum current (in mA) 0x00, // All ports are removable 0xff // Depricated power control mask @@ -123,7 +123,7 @@ static ehci_root_hub_string_s sEHCIRootHubStrings[3] = { EHCIRootHub::EHCIRootHub(Object *rootObject, int8 deviceAddress) : Hub(rootObject, rootObject->GetStack()->IndexOfBusManager(rootObject->GetBusManager()), - sEHCIRootHubDevice, deviceAddress, USB_SPEED_HIGHSPEED) + sEHCIRootHubDevice, deviceAddress, USB_SPEED_HIGHSPEED, true) { } diff --git a/src/add-ons/kernel/busses/usb/ohci_rh.cpp b/src/add-ons/kernel/busses/usb/ohci_rh.cpp index 117c11601a..c6561df620 100644 --- a/src/add-ons/kernel/busses/usb/ohci_rh.cpp +++ b/src/add-ons/kernel/busses/usb/ohci_rh.cpp @@ -76,7 +76,7 @@ static ohci_root_hub_configuration_s sOHCIRootHubConfig = USB_DESCRIPTOR_HUB, // Type 0, // Number of ports 0x0000, // Hub characteristics - 50, // Power on to power good + 0, // Power on to power good 0, // Current 0x00, // Both ports are removable 0xff // Depricated power control mask @@ -122,7 +122,7 @@ static ohci_root_hub_string_s sOHCIRootHubStrings[3] = { OHCIRootHub::OHCIRootHub(Object *rootObject, int8 deviceAddress) : Hub(rootObject, rootObject->GetStack()->IndexOfBusManager(rootObject->GetBusManager()), - sOHCIRootHubDevice, deviceAddress, USB_SPEED_FULLSPEED) + sOHCIRootHubDevice, deviceAddress, USB_SPEED_FULLSPEED, true) { } diff --git a/src/add-ons/kernel/busses/usb/uhci_rh.cpp b/src/add-ons/kernel/busses/usb/uhci_rh.cpp index e6c4cff1e6..a27df8daaa 100644 --- a/src/add-ons/kernel/busses/usb/uhci_rh.cpp +++ b/src/add-ons/kernel/busses/usb/uhci_rh.cpp @@ -79,7 +79,7 @@ static uhci_root_hub_configuration_s sUHCIRootHubConfig = USB_DESCRIPTOR_HUB, // Descriptor type 2, // Number of ports 0x0000, // Hub characteristics - 50, // Power on to power good (in 2ms units) + 0, // Power on to power good (in 2ms units) 0, // Maximum current (in mA) 0x00, // Both ports are removable 0xff // Depricated power control mask @@ -127,7 +127,7 @@ static uhci_root_hub_string_s sUHCIRootHubStrings[3] = { UHCIRootHub::UHCIRootHub(Object *rootObject, int8 deviceAddress) : Hub(rootObject, rootObject->GetStack()->IndexOfBusManager(rootObject->GetBusManager()), - sUHCIRootHubDevice, deviceAddress, USB_SPEED_FULLSPEED) + sUHCIRootHubDevice, deviceAddress, USB_SPEED_FULLSPEED, true) { }