Index: uspace/lib/usb/include/usb/hc.h
===================================================================
--- uspace/lib/usb/include/usb/hc.h	(revision 0edf7c72f0e62cca7de6364fb73274d0a5bb4393)
+++ uspace/lib/usb/include/usb/hc.h	(revision 040282256752de3195a3685ae16d677824e9e975)
@@ -60,4 +60,6 @@
     devman_handle_t *);
 
+int usb_hc_get_address_by_handle(devman_handle_t);
+
 int usb_ddf_get_hc_handle_by_class(size_t, devman_handle_t *);
 
Index: uspace/lib/usb/src/hc.c
===================================================================
--- uspace/lib/usb/src/hc.c	(revision 0edf7c72f0e62cca7de6364fb73274d0a5bb4393)
+++ uspace/lib/usb/src/hc.c	(revision 040282256752de3195a3685ae16d677824e9e975)
@@ -171,4 +171,32 @@
 }
 
+/** Tell USB address assigned to device with given handle.
+ *
+ * @param dev_handle Devman handle of the USB device in question.
+ * @return USB address or negative error code.
+ */
+usb_address_t usb_hc_get_address_by_handle(devman_handle_t dev_handle)
+{
+	int parent_phone = devman_parent_device_connect(dev_handle,
+	    IPC_FLAG_BLOCKING);
+	if (parent_phone < 0) {
+		return parent_phone;
+	}
+
+	sysarg_t address;
+
+	int rc = async_req_2_1(parent_phone, DEV_IFACE_ID(USB_DEV_IFACE),
+	    IPC_M_USB_GET_ADDRESS,
+	    dev_handle, &address);
+
+	if (rc != EOK) {
+		return rc;
+	}
+
+	async_hangup(parent_phone);
+
+	return (usb_address_t) address;
+}
+
 
 /** Get host controller handle by its class index.
