Index: uspace/lib/usbhost/include/usb/host/usb_endpoint_manager.h
===================================================================
--- uspace/lib/usbhost/include/usb/host/usb_endpoint_manager.h	(revision b591cab6d3c22c0c11976c0f5265e5117f008dd3)
+++ uspace/lib/usbhost/include/usb/host/usb_endpoint_manager.h	(revision a6a9910d295ceef9a96352a8b36c6bb095c01a35)
@@ -95,4 +95,7 @@
     ep_remove_callback_t callback, void *arg);
 
+int usb_endpoint_manager_reset_toggle(usb_endpoint_manager_t *instance,
+    usb_target_t target, bool all);
+
 void usb_endpoint_manager_remove_address(usb_endpoint_manager_t *instance,
     usb_address_t address, ep_remove_callback_t callback, void *arg);
Index: uspace/lib/usbhost/src/usb_endpoint_manager.c
===================================================================
--- uspace/lib/usbhost/src/usb_endpoint_manager.c	(revision b591cab6d3c22c0c11976c0f5265e5117f008dd3)
+++ uspace/lib/usbhost/src/usb_endpoint_manager.c	(revision a6a9910d295ceef9a96352a8b36c6bb095c01a35)
@@ -395,4 +395,27 @@
 }
 
+int usb_endpoint_manager_reset_toggle(usb_endpoint_manager_t *instance,
+    usb_target_t target, bool all)
+{
+	assert(instance);
+	if (!usb_target_is_valid(target)) {
+		return EINVAL;
+	}
+
+	int rc = ENOENT;
+
+	fibril_mutex_lock(&instance->guard);
+	list_foreach(*get_list(instance, target.address), it) {
+		endpoint_t *ep = endpoint_get_instance(it);
+		if ((ep->address == target.address)
+		    && (all || ep->endpoint == target.endpoint)) {
+			endpoint_toggle_set(ep, 0);
+			rc = EOK;
+		}
+	}
+	fibril_mutex_unlock(&instance->guard);
+	return rc;
+}
+
 /** Unregister and destroy all endpoints using given address.
  * @param instance usb_endpoint_manager structure, non-null.
