Index: uspace/drv/bus/usb/usbmid/usbmid.c
===================================================================
--- uspace/drv/bus/usb/usbmid/usbmid.c	(revision 3cdaa7fe8c618e722683a161c68f1de35d864b77)
+++ uspace/drv/bus/usb/usbmid/usbmid.c	(revision c280d7e51f5b91994557a7515f968b6e9c07544c)
@@ -45,27 +45,29 @@
 #include "usbmid.h"
 
-/** Get USB device handle by calling the parent usb_device_t.
+/**
+ * Get USB device description by calling HC and altering the interface field.
  *
  * @param[in] fun Device function the operation is running on.
- * @param[out] handle Device handle.
+ * @param[out] desc Device descriptor.
  * @return Error code.
  */
-static int usb_iface_device_handle(ddf_fun_t *fun, devman_handle_t *handle)
-{
-	assert(fun);
-	assert(handle);
-	usb_device_t *usb_dev = usb_device_get(ddf_fun_get_dev(fun));
-	*handle = usb_device_get_devman_handle(usb_dev);
-	return EOK;
-}
-
-/** Callback for DDF USB get interface. */
-static int usb_iface_iface_no(ddf_fun_t *fun, int *iface_no)
+static int usb_iface_description(ddf_fun_t *fun, usb_device_desc_t *desc)
 {
 	usbmid_interface_t *iface = ddf_fun_data_get(fun);
 	assert(iface);
+	usb_device_t *usb_dev = ddf_dev_data_get(ddf_fun_get_dev(fun));
+	assert(usb_dev);
 
-	if (iface_no)
-		*iface_no = iface->interface_no;
+	async_exch_t *exch = usb_device_bus_exchange_begin(usb_dev);
+	if (!exch)
+		return EPARTY;
+
+	usb_device_desc_t tmp_desc;
+	const int ret = usb_get_my_description(exch, &tmp_desc);
+
+	if (ret == EOK && desc) {
+		*desc = tmp_desc;
+		desc->iface = iface->interface_no;
+	}
 
 	return EOK;
@@ -74,6 +76,5 @@
 /** DDF interface of the child - USB functions. */
 static usb_iface_t child_usb_iface = {
-	.get_my_device_handle = usb_iface_device_handle,
-	.get_my_interface = usb_iface_iface_no,
+	.get_my_description = usb_iface_description,
 };
 
