Index: uspace/drv/usbmid/usbmid.c
===================================================================
--- uspace/drv/usbmid/usbmid.c	(revision 18cb870c5021a54901fd39c798fb3b9183310e5a)
+++ uspace/drv/usbmid/usbmid.c	(revision 8ba18c6d4012f3f645523fa1468c09c7b004ae62)
@@ -68,7 +68,24 @@
 }
 
+/** Callback for DDF USB interface. */
+static int usb_iface_get_interface_impl(device_t *device, devman_handle_t handle,
+    int *iface_no)
+{
+	assert(device);
+
+	usbmid_interface_t *iface = device->driver_data;
+	assert(iface);
+
+	if (iface_no != NULL) {
+		*iface_no = iface->interface_no;
+	}
+
+	return EOK;
+}
+
 static usb_iface_t child_usb_iface = {
 	.get_hc_handle = usb_iface_get_hc_handle_hub_child_impl,
-	.get_address = usb_iface_get_address_impl
+	.get_address = usb_iface_get_address_impl,
+	.get_interface = usb_iface_get_interface_impl
 };
 
@@ -121,4 +138,26 @@
 }
 
+/** Create new interface for USB MID device.
+ *
+ * @param dev Backing generic DDF child device (representing interface).
+ * @param iface_no Interface number.
+ * @return New interface.
+ * @retval NULL Error occured.
+ */
+usbmid_interface_t *usbmid_interface_create(device_t *dev, int iface_no)
+{
+	usbmid_interface_t *iface = malloc(sizeof(usbmid_interface_t));
+	if (iface == NULL) {
+		usb_log_error("Out of memory (wanted %zuB).\n",
+		    sizeof(usbmid_interface_t));
+		return NULL;
+	}
+
+	iface->dev = dev;
+	iface->interface_no = iface_no;
+
+	return iface;
+}
+
 
 /** Spawn new child device from one interface.
@@ -135,4 +174,5 @@
 	device_t *child = NULL;
 	char *child_name = NULL;
+	usbmid_interface_t *child_as_interface = NULL;
 	int rc;
 
@@ -155,4 +195,13 @@
 		goto error_leave;
 	}
+
+	child_as_interface = usbmid_interface_create(child,
+	    (int) interface_descriptor->interface_number);
+	if (child_as_interface == NULL) {
+		rc = ENOMEM;
+		goto error_leave;
+	}
+
+	child->driver_data = child_as_interface;
 	child->parent = parent->dev;
 	child->name = child_name;
@@ -181,4 +230,7 @@
 		free(child_name);
 	}
+	if (child_as_interface != NULL) {
+		free(child_as_interface);
+	}
 
 	return rc;
Index: uspace/drv/usbmid/usbmid.h
===================================================================
--- uspace/drv/usbmid/usbmid.h	(revision 18cb870c5021a54901fd39c798fb3b9183310e5a)
+++ uspace/drv/usbmid/usbmid.h	(revision 8ba18c6d4012f3f645523fa1468c09c7b004ae62)
@@ -54,5 +54,14 @@
 } usbmid_device_t;
 
+typedef struct {
+	/** Device container. */
+	device_t *dev;
+
+	/** Interface number. */
+	int interface_no;
+} usbmid_interface_t;
+
 usbmid_device_t *usbmid_device_create(device_t *);
+usbmid_interface_t *usbmid_interface_create(device_t *, int);
 bool usbmid_explore_device(usbmid_device_t *);
 int usbmid_spawn_interface_child(usbmid_device_t *,
