Index: uspace/lib/usbhost/include/usb/host/ddf_helpers.h
===================================================================
--- uspace/lib/usbhost/include/usb/host/ddf_helpers.h	(revision 53332b5b264483817574d5c6293ed791b1516e8a)
+++ uspace/lib/usbhost/include/usb/host/ddf_helpers.h	(revision 0ef03d728764e7bd7a88146ca3db68518857ba1c)
@@ -43,5 +43,6 @@
     usb_address_t address, usb_speed_t speed, const char *name,
     const match_id_list_t *mids);
-int hcd_ddf_setup_device(ddf_dev_t *device, ddf_fun_t **fun);
+int hcd_ddf_setup_device(ddf_dev_t *device, ddf_fun_t **hc_fun,
+    usb_speed_t max_speed, size_t bw, bw_count_func_t bw_count);
 int hcd_ddf_setup_hub(hcd_t *instance, usb_address_t *address, ddf_dev_t *dev);
 
Index: uspace/lib/usbhost/src/ddf_helpers.c
===================================================================
--- uspace/lib/usbhost/src/ddf_helpers.c	(revision 53332b5b264483817574d5c6293ed791b1516e8a)
+++ uspace/lib/usbhost/src/ddf_helpers.c	(revision 0ef03d728764e7bd7a88146ca3db68518857ba1c)
@@ -176,6 +176,8 @@
 	assert(device);
 
+	const usb_speed_t speed = instance->dev_manager.max_speed;
+
 	int ret = usb_device_manager_request_address(&instance->dev_manager,
-	    address, false, USB_SPEED_FULL);
+	    address, false, speed);
 	if (ret != EOK) {
 		usb_log_error("Failed to get root hub address: %s\n",
@@ -197,5 +199,5 @@
 	ret = usb_endpoint_manager_add_ep(
 	    &instance->ep_manager, *address, 0,
-	    USB_DIRECTION_BOTH, USB_TRANSFER_CONTROL, USB_SPEED_FULL, 64,
+	    USB_DIRECTION_BOTH, USB_TRANSFER_CONTROL, speed, 64,
 	    0, NULL, NULL);
 	CHECK_RET_UNREG_RETURN(ret,
@@ -209,5 +211,5 @@
 
 	ret = hcd_ddf_add_device(
-	    instance, device, *address, USB_SPEED_FULL, "rh", &mid_list);
+	    instance, device, *address, speed, "rh", &mid_list);
 	CHECK_RET_UNREG_RETURN(ret,
 	    "Failed to add hcd device: %s.\n", str_error(ret));
@@ -227,5 +229,6 @@
  *  - registers interrupt handler
  */
-int hcd_ddf_setup_device(ddf_dev_t *device, ddf_fun_t **hc_fun)
+int hcd_ddf_setup_device(ddf_dev_t *device, ddf_fun_t **hc_fun,
+    usb_speed_t max_speed, size_t bw, bw_count_func_t bw_count)
 {
 	if (device == NULL)
@@ -257,6 +260,5 @@
 	    "Failed to allocate HCD structure: %s.\n", str_error(ret));
 
-	hcd_init(hcd, USB_SPEED_FULL, BANDWIDTH_AVAILABLE_USB11,
-	    bandwidth_count_usb11);
+	hcd_init(hcd, max_speed, bw, bw_count);
 
 	ret = ddf_fun_bind(instance->hc_fun);
