Index: uspace/drv/ohci/hc.c
===================================================================
--- uspace/drv/ohci/hc.c	(revision bba0dc20841373cf3463646fed05e54aeaf9ce11)
+++ uspace/drv/ohci/hc.c	(revision 5d07f54c4e92772bedf67c509e44c68f45216eea)
@@ -91,4 +91,5 @@
 		usb_log_error("Failed add root hub match-id.\n");
 	}
+	ret = ddf_fun_bind(hub_fun);
 	return ret;
 }
@@ -288,5 +289,5 @@
 {
 	assert(instance);
-	usb_log_debug("OHCI interrupt: %x.\n", status);
+	usb_log_debug("OHCI(%p) interrupt: %x.\n", instance, status);
 	if ((status & ~I_SF) == 0) /* ignore sof status */
 		return;
@@ -354,4 +355,6 @@
 		}
 		usb_log_info("SMM driver: Ownership taken.\n");
+		instance->registers->control &= (C_HCFS_RESET << C_HCFS_SHIFT);
+		async_usleep(50000);
 		return;
 	}
@@ -478,4 +481,6 @@
 {
 	assert(instance);
+
+	bzero(&instance->rh, sizeof(instance->rh));
 	/* Init queues */
 	hc_init_transfer_lists(instance);
Index: uspace/drv/ohci/main.c
===================================================================
--- uspace/drv/ohci/main.c	(revision bba0dc20841373cf3463646fed05e54aeaf9ce11)
+++ uspace/drv/ohci/main.c	(revision 5d07f54c4e92772bedf67c509e44c68f45216eea)
@@ -75,5 +75,6 @@
 		return ret;
 	}
-	device->driver_data = ohci;
+//	device->driver_data = ohci;
+	hc_register_hub(&ohci->hc, ohci->rh_fun);
 
 	usb_log_info("Controlling new OHCI device `%s'.\n", device->name);
Index: uspace/drv/ohci/ohci.c
===================================================================
--- uspace/drv/ohci/ohci.c	(revision bba0dc20841373cf3463646fed05e54aeaf9ce11)
+++ uspace/drv/ohci/ohci.c	(revision 5d07f54c4e92772bedf67c509e44c68f45216eea)
@@ -54,4 +54,5 @@
 {
 	assert(dev);
+	assert(dev->driver_data);
 	hc_t *hc = &((ohci_t*)dev->driver_data)->hc;
 	uint16_t status = IPC_GET_ARG1(*call);
@@ -208,11 +209,9 @@
 	    "Failed(%d) to create root hub function.\n", ret);
 
-	hc_register_hub(&instance->hc, instance->rh_fun);
 
 	instance->rh_fun->ops = &rh_ops;
 	instance->rh_fun->driver_data = NULL;
-	ret = ddf_fun_bind(instance->rh_fun);
-	CHECK_RET_FINI_RETURN(ret,
-	    "Failed(%d) to register OHCI root hub.\n", ret);
+	
+	device->driver_data = instance;
 
 	hc_start_hw(&instance->hc);
