Index: uspace/lib/usbhost/include/usb/host/hcd.h
===================================================================
--- uspace/lib/usbhost/include/usb/host/hcd.h	(revision 1741254610b685d1235311ef970463cfc32c068c)
+++ uspace/lib/usbhost/include/usb/host/hcd.h	(revision 5e07cbc0dbf74b36e7b0332f98d3d8be06a0e9de)
@@ -68,9 +68,9 @@
  * @param bw_count Bandwidth compute function, passed to endpoint manager.
  */
-static inline void hcd_init(hcd_t *hcd, size_t bandwidth,
+static inline void hcd_init(hcd_t *hcd, usb_speed_t max_speed, size_t bandwidth,
     size_t (*bw_count)(usb_speed_t, usb_transfer_type_t, size_t, size_t))
 {
 	assert(hcd);
-	usb_device_manager_init(&hcd->dev_manager);
+	usb_device_manager_init(&hcd->dev_manager, max_speed);
 	usb_endpoint_manager_init(&hcd->ep_manager, bandwidth, bw_count);
 	hcd->private_data = NULL;
Index: uspace/lib/usbhost/include/usb/host/usb_device_manager.h
===================================================================
--- uspace/lib/usbhost/include/usb/host/usb_device_manager.h	(revision 1741254610b685d1235311ef970463cfc32c068c)
+++ uspace/lib/usbhost/include/usb/host/usb_device_manager.h	(revision 5e07cbc0dbf74b36e7b0332f98d3d8be06a0e9de)
@@ -59,4 +59,5 @@
 		devman_handle_t handle; /**< Devman handle of the device. */
 	} devices[USB_ADDRESS_COUNT];
+	usb_speed_t max_speed;
 	fibril_mutex_t guard;
 	/** The last reserved address */
@@ -64,5 +65,6 @@
 } usb_device_manager_t;
 
-void usb_device_manager_init(usb_device_manager_t *instance);
+void usb_device_manager_init(
+    usb_device_manager_t *instance, usb_speed_t max_speed);
 
 usb_address_t usb_device_manager_get_free_address(
Index: uspace/lib/usbhost/src/usb_device_manager.c
===================================================================
--- uspace/lib/usbhost/src/usb_device_manager.c	(revision 1741254610b685d1235311ef970463cfc32c068c)
+++ uspace/lib/usbhost/src/usb_device_manager.c	(revision 5e07cbc0dbf74b36e7b0332f98d3d8be06a0e9de)
@@ -41,8 +41,10 @@
  *
  * @param[in] instance Memory place to initialize.
+ * @param[in] max_speed Maximum allowed USB speed of devices (inclusive).
  *
  * Set all values to false/0.
  */
-void usb_device_manager_init(usb_device_manager_t *instance)
+void usb_device_manager_init(
+    usb_device_manager_t *instance, usb_speed_t max_speed)
 {
 	assert(instance);
@@ -56,4 +58,5 @@
 	instance->devices[0].occupied = true;
 	instance->last_address = 0;
+	instance->max_speed = max_speed;
 	fibril_mutex_initialize(&instance->guard);
 }
@@ -69,4 +72,6 @@
 {
 	assert(instance);
+	if (speed > instance->max_speed)
+		return ENOTSUP;
 	fibril_mutex_lock(&instance->guard);
 
