Index: uspace/drv/bus/usb/ehci/hw_struct/queue_head.c
===================================================================
--- uspace/drv/bus/usb/ehci/hw_struct/queue_head.c	(revision a996402ef898089ab7a7f701afb770ceb257fd6b)
+++ uspace/drv/bus/usb/ehci/hw_struct/queue_head.c	(revision 708da59e02c531854089e5121c8f88c7d36f392f)
@@ -39,8 +39,7 @@
 
 #include "mem_access.h"
-
 #include "queue_head.h"
 
-const uint32_t speed[] = {
+static const uint32_t speed[] = {
 	[USB_SPEED_LOW] = QH_EP_CHAR_EPS_LS,
 	[USB_SPEED_FULL] = QH_EP_CHAR_EPS_FS,
@@ -54,10 +53,10 @@
 
 	EHCI_MEM32_WR(instance->horizontal, LINK_POINTER_TERM);
-	EHCI_MEM32_WR(instance->current, LINK_POINTER_TERM);
+//	EHCI_MEM32_WR(instance->current, LINK_POINTER_TERM);
 	EHCI_MEM32_WR(instance->next, LINK_POINTER_TERM);
 	EHCI_MEM32_WR(instance->alternate, LINK_POINTER_TERM);
 	if (ep == NULL) {
-		/* Mark as halted and list head, used by endpoint lists
-		 * as dummy */
+		/* Mark as halted and list head,
+		 * used by endpoint lists as dummy */
 		EHCI_MEM32_WR(instance->ep_char, QH_EP_CHAR_H_FLAG);
 		EHCI_MEM32_WR(instance->status, QH_STATUS_HALTED_FLAG);
@@ -78,19 +77,19 @@
 		EHCI_MEM32_SET(instance->ep_char, QH_EP_CHAR_DTC_FLAG);
 	}
+	uint32_t ep_cap = QH_EP_CAP_C_MASK_SET(3 << 2) |
+		    QH_EP_CAP_MULTI_SET(ep->packets);
+	if (ep->speed != USB_SPEED_HIGH) {
+		ep_cap |=
+		    QH_EP_CAP_TT_PORT_SET(ep->tt.port) |
+		    QH_EP_CAP_TT_ADDR_SET(ep->tt.address);
+	}
+	if (ep->transfer_type == USB_TRANSFER_INTERRUPT) {
+		ep_cap |= QH_EP_CAP_S_MASK_SET(3);
+	}
 
 	// TODO Figure out how to correctly use CMASK and SMASK for LS/FS
 	// INT transfers. Current values are just guesses
-	/* Setting TT stuff on HS endpoints is OK, the fields are ignored,
-	 * and so is setting multi on async (should be 1 anyway)*/
-	EHCI_MEM32_WR(instance->ep_cap,
-	    QH_EP_CAP_MULTI_SET(ep->packets) |
-	    QH_EP_CAP_TT_PORT_SET(ep->tt.port) |
-	    QH_EP_CAP_TT_ADDR_SET(ep->tt.address) |
-	    QH_EP_CAP_C_MASK_SET(3 << 2)
-	);
+	EHCI_MEM32_WR(instance->ep_cap, ep_cap);
 
-	if (ep->transfer_type == USB_TRANSFER_INTERRUPT) {
-		EHCI_MEM32_SET(instance->ep_cap, QH_EP_CAP_S_MASK_SET(3));
-	}
 	/* The rest of the fields are transfer working area, it should be ok to
 	 * leave it NULL */
