Index: uspace/drv/bus/usb/ehci/main.c
===================================================================
--- uspace/drv/bus/usb/ehci/main.c	(revision 60af4cdb1acd8703dcd25885a99082aecd43036f)
+++ uspace/drv/bus/usb/ehci/main.c	(revision 0f6b50f8f7c45af4a886d0766e10103b27242002)
@@ -51,5 +51,5 @@
 #define NAME "ehci"
 
-static int ehci_driver_init(hcd_t *, const hw_res_list_parsed_t *);
+static int ehci_driver_init(hcd_t *, const hw_res_list_parsed_t *, ddf_dev_t *);
 static int ehci_driver_claim(hcd_t *, ddf_dev_t *);
 static int ehci_driver_start(hcd_t *, bool);
@@ -72,5 +72,5 @@
 
 
-static int ehci_driver_init(hcd_t *hcd, const hw_res_list_parsed_t *res)
+static int ehci_driver_init(hcd_t *hcd, const hw_res_list_parsed_t *res, ddf_dev_t *device)
 {
 	assert(hcd);
Index: uspace/drv/bus/usb/ohci/main.c
===================================================================
--- uspace/drv/bus/usb/ohci/main.c	(revision 60af4cdb1acd8703dcd25885a99082aecd43036f)
+++ uspace/drv/bus/usb/ohci/main.c	(revision 0f6b50f8f7c45af4a886d0766e10103b27242002)
@@ -48,5 +48,5 @@
 
 #define NAME "ohci"
-static int ohci_driver_init(hcd_t *, const hw_res_list_parsed_t *);
+static int ohci_driver_init(hcd_t *, const hw_res_list_parsed_t *, ddf_dev_t *);
 static int ohci_driver_start(hcd_t *, bool);
 static int ohci_driver_claim(hcd_t *, ddf_dev_t *);
@@ -69,5 +69,5 @@
 
 
-static int ohci_driver_init(hcd_t *hcd, const hw_res_list_parsed_t *res)
+static int ohci_driver_init(hcd_t *hcd, const hw_res_list_parsed_t *res, ddf_dev_t *device)
 {
 	int err;
Index: uspace/drv/bus/usb/uhci/main.c
===================================================================
--- uspace/drv/bus/usb/uhci/main.c	(revision 60af4cdb1acd8703dcd25885a99082aecd43036f)
+++ uspace/drv/bus/usb/uhci/main.c	(revision 0f6b50f8f7c45af4a886d0766e10103b27242002)
@@ -49,5 +49,5 @@
 #define NAME "uhci"
 
-static int uhci_driver_init(hcd_t *, const hw_res_list_parsed_t *);
+static int uhci_driver_init(hcd_t *, const hw_res_list_parsed_t *, ddf_dev_t *);
 static int uhci_driver_start(hcd_t *, bool);
 static void uhci_driver_fini(hcd_t *);
@@ -69,5 +69,5 @@
 };
 
-static int uhci_driver_init(hcd_t *hcd, const hw_res_list_parsed_t *res)
+static int uhci_driver_init(hcd_t *hcd, const hw_res_list_parsed_t *res, ddf_dev_t *device)
 {
 	int err;
Index: uspace/drv/bus/usb/xhci/hc.c
===================================================================
--- uspace/drv/bus/usb/xhci/hc.c	(revision 60af4cdb1acd8703dcd25885a99082aecd43036f)
+++ uspace/drv/bus/usb/xhci/hc.c	(revision 0f6b50f8f7c45af4a886d0766e10103b27242002)
@@ -187,5 +187,5 @@
 }
 
-int hc_init_memory(xhci_hc_t *hc)
+int hc_init_memory(xhci_hc_t *hc, ddf_dev_t *device)
 {
 	int err;
@@ -216,5 +216,5 @@
 		goto err_cmd;
 
-	if ((err = xhci_rh_init(&hc->rh, hc)))
+	if ((err = xhci_rh_init(&hc->rh, hc, device)))
 		goto err_transfers;
 
Index: uspace/drv/bus/usb/xhci/hc.h
===================================================================
--- uspace/drv/bus/usb/xhci/hc.h	(revision 60af4cdb1acd8703dcd25885a99082aecd43036f)
+++ uspace/drv/bus/usb/xhci/hc.h	(revision 0f6b50f8f7c45af4a886d0766e10103b27242002)
@@ -89,5 +89,5 @@
 
 int hc_init_mmio(xhci_hc_t *, const hw_res_list_parsed_t *);
-int hc_init_memory(xhci_hc_t *);
+int hc_init_memory(xhci_hc_t *, ddf_dev_t *);
 int hc_claim(xhci_hc_t *, ddf_dev_t *);
 int hc_irq_code_gen(irq_code_t *, xhci_hc_t *, const hw_res_list_parsed_t *);
Index: uspace/drv/bus/usb/xhci/main.c
===================================================================
--- uspace/drv/bus/usb/xhci/main.c	(revision 60af4cdb1acd8703dcd25885a99082aecd43036f)
+++ uspace/drv/bus/usb/xhci/main.c	(revision 0f6b50f8f7c45af4a886d0766e10103b27242002)
@@ -47,5 +47,5 @@
 #define NAME "xhci"
 
-static int hc_driver_init(hcd_t *, const hw_res_list_parsed_t *);
+static int hc_driver_init(hcd_t *, const hw_res_list_parsed_t *, ddf_dev_t *);
 static int hcd_irq_code_gen(irq_code_t *, hcd_t *, const hw_res_list_parsed_t *);
 static int hcd_claim(hcd_t *, ddf_dev_t *);
@@ -72,5 +72,5 @@
 };
 
-static int hc_driver_init(hcd_t *hcd, const hw_res_list_parsed_t *hw_res)
+static int hc_driver_init(hcd_t *hcd, const hw_res_list_parsed_t *hw_res, ddf_dev_t *device)
 {
 	int err;
@@ -83,5 +83,5 @@
 		goto err;
 
-	if ((err = hc_init_memory(hc)))
+	if ((err = hc_init_memory(hc, device)))
 		goto err;
 
@@ -124,6 +124,5 @@
 	assert(hc);
 
-	hc->rh.hc_device = dev;
-	return device_init(&hc->rh.device);
+	return EOK;
 }
 
Index: uspace/drv/bus/usb/xhci/rh.c
===================================================================
--- uspace/drv/bus/usb/xhci/rh.c	(revision 60af4cdb1acd8703dcd25885a99082aecd43036f)
+++ uspace/drv/bus/usb/xhci/rh.c	(revision 0f6b50f8f7c45af4a886d0766e10103b27242002)
@@ -61,5 +61,5 @@
 	XHCI_REG_MASK(XHCI_PORT_CEC);
 
-int xhci_rh_init(xhci_rh_t *rh, xhci_hc_t *hc)
+int xhci_rh_init(xhci_rh_t *rh, xhci_hc_t *hc, ddf_dev_t *device)
 {
 	assert(rh);
@@ -68,6 +68,7 @@
 	rh->hc = hc;
 	rh->max_ports = XHCI_REG_RD(hc->cap_regs, XHCI_CAP_MAX_PORTS);
-
-	return EOK;
+	hc->rh.hc_device = device;
+
+	return device_init(&hc->rh.device);
 }
 
@@ -211,4 +212,5 @@
 	int err;
 	assert(rh);
+	assert(rh->hc_device);
 
 	xhci_bus_t *bus = &rh->hc->bus;
Index: uspace/drv/bus/usb/xhci/rh.h
===================================================================
--- uspace/drv/bus/usb/xhci/rh.h	(revision 60af4cdb1acd8703dcd25885a99082aecd43036f)
+++ uspace/drv/bus/usb/xhci/rh.h	(revision 0f6b50f8f7c45af4a886d0766e10103b27242002)
@@ -77,5 +77,5 @@
 } xhci_rh_t;
 
-int xhci_rh_init(xhci_rh_t *, xhci_hc_t *);
+int xhci_rh_init(xhci_rh_t *, xhci_hc_t *, ddf_dev_t *);
 int xhci_rh_fini(xhci_rh_t *);
 const xhci_port_speed_t *xhci_rh_get_port_speed(xhci_rh_t *, uint8_t);
