Index: uspace/lib/usbdev/src/devdrv.c
===================================================================
--- uspace/lib/usbdev/src/devdrv.c	(revision bb70637e6f264ca63d4815cb32855324cc5fa275)
+++ uspace/lib/usbdev/src/devdrv.c	(revision 8b68bdfef6c3f6dfcee87b4f33a9f87f225f827d)
@@ -313,4 +313,32 @@
 }
 
+static int usb_dev_get_info(usb_device_t *usb_dev, devman_handle_t *handle,
+    usb_address_t *address, int *iface_no)
+{
+	assert(usb_dev);
+
+	int ret = EOK;
+	async_exch_t *exch = async_exchange_begin(usb_dev->bus_session);
+	if (!exch)
+		ret = ENOMEM;
+
+	if (ret == EOK && address)
+		ret = usb_get_my_address(exch, address);
+
+	if (ret == EOK && handle)
+		ret = usb_get_hc_handle(exch, handle);
+
+	if (ret == EOK && iface_no) {
+		ret = usb_get_my_interface(exch, iface_no);
+		if (ret == ENOTSUP) {
+			ret = EOK;
+			*iface_no = -1;
+		}
+	}
+
+	async_exchange_end(exch);
+	return ret;
+}
+
 /** Initialize new instance of USB device.
  *
@@ -346,5 +374,5 @@
 	usb_address_t address;
 
-	int rc = usb_get_info_by_handle(ddf_dev_get_handle(ddf_dev),
+	int rc = usb_dev_get_info(usb_dev,
 	    &hc_handle, &address, &usb_dev->interface_no);
 	if (rc != EOK) {
@@ -436,7 +464,7 @@
 {
 	assert(usb_dev);
-	assert(usb_dev->ddf_dev);
-	//TODO Handle case without ddf_dev
-	return ddf_dev_get_name(usb_dev->ddf_dev);
+	if (usb_dev->ddf_dev)
+		return ddf_dev_get_name(usb_dev->ddf_dev);
+	return NULL;
 }
 
