Index: uspace/lib/usb/include/usb/pipes.h
===================================================================
--- uspace/lib/usb/include/usb/pipes.h	(revision 7526e3d9dbfa6a43fb1014e632caa2fbe206bd0b)
+++ uspace/lib/usb/include/usb/pipes.h	(revision 159b91f4767c38fbab0288369a2ec23b232480a5)
@@ -107,4 +107,6 @@
 	/** Interface number the endpoint must belong to (-1 for any). */
 	int interface_no;
+	/** Alternate interface setting to choose. */
+	int interface_setting;
 	/** Found descriptor fitting the description. */
 	usb_standard_endpoint_descriptor_t *descriptor;
Index: uspace/lib/usb/src/devdrv.c
===================================================================
--- uspace/lib/usb/src/devdrv.c	(revision 7526e3d9dbfa6a43fb1014e632caa2fbe206bd0b)
+++ uspace/lib/usb/src/devdrv.c	(revision 159b91f4767c38fbab0288369a2ec23b232480a5)
@@ -135,4 +135,5 @@
 		dev->pipes[i].description = drv->endpoints[i];
 		dev->pipes[i].interface_no = dev->interface_no;
+		dev->pipes[i].interface_setting = 0;
 	}
 
@@ -439,4 +440,5 @@
 }
 
+
 /**
  * @}
Index: uspace/lib/usb/src/pipesinit.c
===================================================================
--- uspace/lib/usb/src/pipesinit.c	(revision 7526e3d9dbfa6a43fb1014e632caa2fbe206bd0b)
+++ uspace/lib/usb/src/pipesinit.c	(revision 159b91f4767c38fbab0288369a2ec23b232480a5)
@@ -121,5 +121,5 @@
     usb_endpoint_mapping_t *mapping, size_t mapping_count,
     usb_endpoint_description_t *found_endpoint,
-    int interface_number)
+    int interface_number, int interface_setting)
 {
 	while (mapping_count > 0) {
@@ -127,8 +127,13 @@
 		    || (mapping->interface_no == interface_number);
 
+		bool interface_setting_fits = (mapping->interface_setting < 0)
+		    || (mapping->interface_setting == interface_setting);
+
 		bool endpoint_descriptions_fits = endpoint_fits_description(
 		    mapping->description, found_endpoint);
 
-		if (interface_number_fits && endpoint_descriptions_fits) {
+		if (interface_number_fits
+		    && interface_setting_fits
+		    && endpoint_descriptions_fits) {
 			return mapping;
 		}
@@ -181,5 +186,6 @@
 	 */
 	usb_endpoint_mapping_t *ep_mapping = find_endpoint_mapping(mapping,
-	    mapping_count, &description, interface->interface_number);
+	    mapping_count, &description,
+	    interface->interface_number, interface->alternate_setting);
 	if (ep_mapping == NULL) {
 		return ENOENT;
