Index: uspace/drv/ohci/hc.c
===================================================================
--- uspace/drv/ohci/hc.c	(revision 78d4e1fb78be4a2c7d2320a082ac0deca1354826)
+++ uspace/drv/ohci/hc.c	(revision eaf1e3d30428e166ffcfa2cd5f0abf79d01c9120)
@@ -160,24 +160,30 @@
 {
 	assert(instance);
-//	if ((status & ~IS_SF) == 0) /* ignore sof status */
-//		return;
+	if ((status & ~IS_SF) == 0) /* ignore sof status */
+		return;
 	if (status & IS_RHSC)
 		rh_interrupt(&instance->rh);
 
-	usb_log_fatal("OHCI interrupt: %x.\n", status);
-
-
-	LIST_INITIALIZE(done);
-	transfer_list_remove_finished(&instance->transfers_interrupt, &done);
-	transfer_list_remove_finished(&instance->transfers_isochronous, &done);
-	transfer_list_remove_finished(&instance->transfers_control, &done);
-	transfer_list_remove_finished(&instance->transfers_bulk, &done);
-
-	while (!list_empty(&done)) {
-		link_t *item = done.next;
-		list_remove(item);
-		usb_transfer_batch_t *batch =
-		    list_get_instance(item, usb_transfer_batch_t, link);
-		usb_transfer_batch_finish(batch);
+	usb_log_debug("OHCI interrupt: %x.\n", status);
+
+
+	if (status & IS_WDH) {
+		LIST_INITIALIZE(done);
+		transfer_list_remove_finished(
+		    &instance->transfers_interrupt, &done);
+		transfer_list_remove_finished(
+		    &instance->transfers_isochronous, &done);
+		transfer_list_remove_finished(
+		    &instance->transfers_control, &done);
+		transfer_list_remove_finished(
+		    &instance->transfers_bulk, &done);
+
+		while (!list_empty(&done)) {
+			link_t *item = done.next;
+			list_remove(item);
+			usb_transfer_batch_t *batch =
+			    list_get_instance(item, usb_transfer_batch_t, link);
+			usb_transfer_batch_finish(batch);
+		}
 	}
 }
@@ -191,5 +197,5 @@
 		instance->registers->interrupt_status = status;
 		hc_interrupt(instance, status);
-		async_usleep(2000000);
+		async_usleep(10000);
 	}
 	return EOK;
Index: uspace/drv/ohci/hw_struct/transfer_descriptor.h
===================================================================
--- uspace/drv/ohci/hw_struct/transfer_descriptor.h	(revision 78d4e1fb78be4a2c7d2320a082ac0deca1354826)
+++ uspace/drv/ohci/hw_struct/transfer_descriptor.h	(revision eaf1e3d30428e166ffcfa2cd5f0abf79d01c9120)
@@ -50,6 +50,6 @@
 #define TD_STATUS_DP_SHIFT (19)
 #define TD_STATUS_DP_SETUP (0x0)
-#define TD_STATUS_DP_IN (0x1)
-#define TD_STATUS_DP_OUT (0x2)
+#define TD_STATUS_DP_OUT (0x1)
+#define TD_STATUS_DP_IN (0x2)
 #define TD_STATUS_DI_MASK (0x7) /* delay interrupt, wait DI frames before int */
 #define TD_STATUS_DI_SHIFT (21)
