Index: uspace/drv/ohci/hc.c
===================================================================
--- uspace/drv/ohci/hc.c	(revision aeca5a3917e68570670d6eed0576b4f79ade92cc)
+++ uspace/drv/ohci/hc.c	(revision 2ff7360836b0bf2a6378fc44c715970e74e225d7)
@@ -56,10 +56,9 @@
 	assert(hub_fun);
 
-	int ret;
-
-	usb_address_t hub_address =
+	const usb_address_t hub_address =
 	    device_keeper_get_free_address(&instance->manager, USB_SPEED_FULL);
 	if (hub_address <= 0) {
-		usb_log_error("Failed to get OHCI root hub address.\n");
+		usb_log_error("Failed(%d) to get OHCI root hub address.\n",
+		    hub_address);
 		return hub_address;
 	}
@@ -68,28 +67,30 @@
 	    &instance->manager, hub_address, hub_fun->handle);
 
-	ret = hc_add_endpoint(instance, hub_address, 0, USB_SPEED_FULL,
+#define CHECK_RET_RELEASE(ret, message...) \
+if (ret != EOK) { \
+	usb_log_error(message); \
+	hc_remove_endpoint(instance, hub_address, 0, USB_DIRECTION_BOTH); \
+	usb_device_keeper_release(&instance->manager, hub_address); \
+	return ret; \
+} else (void)0
+
+	int ret = hc_add_endpoint(instance, hub_address, 0, USB_SPEED_FULL,
 	    USB_TRANSFER_CONTROL, USB_DIRECTION_BOTH, 64, 0, 0);
-	if (ret != EOK) {
-		usb_log_error("Failed to add OHCI rh endpoint 0.\n");
-		usb_device_keeper_release(&instance->manager, hub_address);
-		return ret;
-	}
+	CHECK_RET_RELEASE(ret, "Failed(%d) to add OHCI rh endpoint 0.\n", ret);
 
 	char *match_str = NULL;
 	/* DDF needs heap allocated string */
 	ret = asprintf(&match_str, "usb&class=hub");
-	if (ret < 0) {
-		usb_log_error(
-		    "Failed(%d) to create root hub match-id string.\n", ret);
-		usb_device_keeper_release(&instance->manager, hub_address);
-		return ret;
-	}
+	ret = ret > 0 ? 0 : ret;
+	CHECK_RET_RELEASE(ret, "Failed(%d) to create match-id string.\n", ret);
 
 	ret = ddf_fun_add_match_id(hub_fun, match_str, 100);
-	if (ret != EOK) {
-		usb_log_error("Failed add root hub match-id.\n");
-	}
+	CHECK_RET_RELEASE(ret, "Failed(%d) add root hub match-id.\n", ret);
+
 	ret = ddf_fun_bind(hub_fun);
-	return ret;
+	CHECK_RET_RELEASE(ret, "Failed(%d) to bind root hub function.\n", ret);
+
+	return EOK;
+#undef CHECK_RET_RELEASE
 }
 /*----------------------------------------------------------------------------*/
@@ -121,8 +122,6 @@
 #undef CHECK_RET_RETURN
 
-
-//	hc_init_hw(instance);
+	fibril_mutex_initialize(&instance->guard);
 	hc_gain_control(instance);
-	fibril_mutex_initialize(&instance->guard);
 
 	rh_init(&instance->rh, instance->registers);
