Index: uspace/drv/bus/usb/uhci/main.c
===================================================================
--- uspace/drv/bus/usb/uhci/main.c	(revision 1bb9833fc2e7b4beaa4e8edb4d9769d4f2d4c64c)
+++ uspace/drv/bus/usb/uhci/main.c	(revision e3a07bba11969b79195e334d7a3b3f0b62575cfe)
@@ -26,5 +26,5 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
-/** @addtogroup drvusbuhcihc
+/** @addtogroup drvusbuhci
  * @{
  */
@@ -35,6 +35,8 @@
 #include <assert.h>
 #include <ddf/driver.h>
+#include <devman.h>
 #include <errno.h>
 #include <io/log.h>
+#include <pci_dev_iface.h>
 #include <stdio.h>
 #include <str_error.h>
@@ -56,4 +58,26 @@
 };
 
+/** Call the PCI driver with a request to clear legacy support register
+ *
+ * @param[in] device Device asking to disable interrupts
+ * @return Error code.
+ */
+static int disable_legacy(ddf_dev_t *device)
+{
+	assert(device);
+
+	async_sess_t *parent_sess = devman_parent_device_connect(
+	    EXCHANGE_SERIALIZE, ddf_dev_get_handle(device), IPC_FLAG_BLOCKING);
+	if (!parent_sess)
+		return ENOMEM;
+
+	/* See UHCI design guide page 45 for these values.
+	 * Write all WC bits in USB legacy register */
+	const int rc = pci_config_space_write_16(parent_sess, 0xc0, 0xaf00);
+
+	async_hangup(parent_sess);
+	return rc;
+}
+
 /** Initialize a new ddf driver instance for uhci hc and hub.
  *
@@ -66,5 +90,13 @@
 	assert(device);
 
-	const int ret = device_setup_uhci(device);
+	int ret = disable_legacy(device);
+	if (ret != EOK) {
+		usb_log_error("Failed to disable legacy USB: %s.\n",
+		    str_error(ret));
+		return ret;
+	}
+
+
+	ret = device_setup_uhci(device);
 	if (ret != EOK) {
 		usb_log_error("Failed to initialize UHCI driver: %s.\n",
Index: uspace/drv/bus/usb/uhci/uhci.c
===================================================================
--- uspace/drv/bus/usb/uhci/uhci.c	(revision 1bb9833fc2e7b4beaa4e8edb4d9769d4f2d4c64c)
+++ uspace/drv/bus/usb/uhci/uhci.c	(revision e3a07bba11969b79195e334d7a3b3f0b62575cfe)
@@ -38,5 +38,4 @@
 #include <ddf/interrupt.h>
 #include <device/hw_res_parsed.h>
-#include <pci_dev_iface.h>
 #include <devman.h>
 #include <errno.h>
@@ -75,26 +74,4 @@
 }
 
-/** Call the PCI driver with a request to clear legacy support register
- *
- * @param[in] device Device asking to disable interrupts
- * @return Error code.
- */
-static int disable_legacy(ddf_dev_t *device)
-{
-	assert(device);
-
-	async_sess_t *parent_sess = devman_parent_device_connect(
-	    EXCHANGE_SERIALIZE, ddf_dev_get_handle(device), IPC_FLAG_BLOCKING);
-	if (!parent_sess)
-		return ENOMEM;
-
-	/* See UHCI design guide page 45 for these values.
-	 * Write all WC bits in USB legacy register */
-	const int rc = pci_config_space_write_16(parent_sess, 0xc0, 0xaf00);
-
-	async_hangup(parent_sess);
-	return rc;
-}
-
 /** Initialize hc and rh DDF structures and their respective drivers.
  *
@@ -103,5 +80,4 @@
  * This function does all the preparatory work for hc and rh drivers:
  *  - gets device's hw resources
- *  - disables UHCI legacy support (PCI config space)
  *  - attempts to enable interrupts
  *  - registers interrupt handler
@@ -152,11 +128,4 @@
 	}
 
-	ret = disable_legacy(device);
-	if (ret != EOK) {
-		usb_log_error("Failed to disable legacy USB: %s.\n",
-		    str_error(ret));
-		goto irq_unregister;
-	}
-
 	ret = hc_init(hc, &regs, interrupts);
 	if (ret != EOK) {
