Index: uspace/drv/bus/usb/ehci/main.c
===================================================================
--- uspace/drv/bus/usb/ehci/main.c	(revision cc468c7476ce51abc91d3e200a317ed0c3cc9852)
+++ uspace/drv/bus/usb/ehci/main.c	(revision a799708b12ae62b2b20e4b76305e1a25bb541fa6)
@@ -89,4 +89,13 @@
 
 
+static const ddf_hc_driver_t ehci_hc_driver = {
+	.claim = disable_legacy,
+	.hc_speed = USB_SPEED_HIGH,
+	.irq_code_gen = ehci_hc_gen_irq_code,
+	.init = ehci_driver_init,
+	.fini = ehci_driver_fini,
+	.name = "EHCI-PCI"
+};
+
 /** Initializes a new ddf driver instance of EHCI hcd.
  *
@@ -99,24 +108,6 @@
 	assert(device);
 
-	int ret = disable_legacy(device);
-	if (ret != EOK) {
-		usb_log_error("Failed to disable EHCI legacy support: %s\n",
-		    str_error(ret));
-		return ret;
-	}
+	return hcd_ddf_add_hc(device, &ehci_hc_driver);
 
-	ret = ddf_hcd_device_setup_all(device, USB_SPEED_HIGH,
-	    BANDWIDTH_AVAILABLE_USB20, bandwidth_count_usb11,
-	    ddf_hcd_gen_irq_handler, ehci_hc_gen_irq_code,
-	    ehci_driver_init, ehci_driver_fini);
-	if (ret != EOK) {
-		usb_log_error("Failed to initialize EHCI driver: %s.\n",
-		    str_error(ret));
-		return ret;
-	}
-	usb_log_info("Controlling new EHCI device '%s'.\n",
-	    ddf_dev_get_name(device));
-
-	return EOK;
 }
 
Index: uspace/drv/bus/usb/ohci/main.c
===================================================================
--- uspace/drv/bus/usb/ohci/main.c	(revision cc468c7476ce51abc91d3e200a317ed0c3cc9852)
+++ uspace/drv/bus/usb/ohci/main.c	(revision a799708b12ae62b2b20e4b76305e1a25bb541fa6)
@@ -74,4 +74,12 @@
 }
 
+static const ddf_hc_driver_t ohci_hc_driver = {
+        .hc_speed = USB_SPEED_FULL,
+        .irq_code_gen = ohci_hc_gen_irq_code,
+        .init = ohci_driver_init,
+        .fini = ohci_driver_fini,
+        .name = "OHCI"
+};
+
 /** Initializes a new ddf driver instance of OHCI hcd.
  *
@@ -83,17 +91,5 @@
 	usb_log_debug("ohci_dev_add() called\n");
 	assert(device);
-
-	const int ret = ddf_hcd_device_setup_all(device, USB_SPEED_FULL,
-	    BANDWIDTH_AVAILABLE_USB11, bandwidth_count_usb11,
-	    ddf_hcd_gen_irq_handler, ohci_hc_gen_irq_code,
-	    ohci_driver_init, ohci_driver_fini);
-	if (ret != EOK) {
-		usb_log_error("Failed to initialize OHCI driver: %s.\n",
-		    str_error(ret));
-	}
-	usb_log_info("Controlling new OHCI device '%s'.\n",
-	    ddf_dev_get_name(device));
-
-	return ret;
+	return hcd_ddf_add_hc(device, &ohci_hc_driver);
 }
 
Index: uspace/drv/bus/usb/uhci/main.c
===================================================================
--- uspace/drv/bus/usb/uhci/main.c	(revision cc468c7476ce51abc91d3e200a317ed0c3cc9852)
+++ uspace/drv/bus/usb/uhci/main.c	(revision a799708b12ae62b2b20e4b76305e1a25bb541fa6)
@@ -106,4 +106,13 @@
 	return rc;
 }
+static const ddf_hc_driver_t uhci_hc_driver = {
+        .claim = disable_legacy,
+        .hc_speed = USB_SPEED_FULL,
+        .irq_code_gen = uhci_hc_gen_irq_code,
+        .init = uhci_driver_init,
+        .fini = uhci_driver_fini,
+        .name = "UHCI"
+};
+
 
 /** Initialize a new ddf driver instance for uhci hc and hub.
@@ -116,26 +125,5 @@
 	usb_log_debug2("uhci_dev_add() called\n");
 	assert(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 = ddf_hcd_device_setup_all(device, USB_SPEED_FULL,
-	    BANDWIDTH_AVAILABLE_USB11, bandwidth_count_usb11,
-	    ddf_hcd_gen_irq_handler, uhci_hc_gen_irq_code,
-	    uhci_driver_init, uhci_driver_fini);
-	if (ret != EOK) {
-		usb_log_error("Failed to initialize UHCI driver: %s.\n",
-		    str_error(ret));
-	} else {
-		usb_log_info("Controlling new UHCI device '%s'.\n",
-		    ddf_dev_get_name(device));
-	}
-
-	return ret;
+	return hcd_ddf_add_hc(device, &uhci_hc_driver);
 }
 
