Index: uspace/lib/usb/include/usb/pipes.h
===================================================================
--- uspace/lib/usb/include/usb/pipes.h	(revision 206f71ae21a040a7540499adee488e4c575500b1)
+++ uspace/lib/usb/include/usb/pipes.h	(revision c2343cc1f77b2631ad437868442f47b0d6e87985)
@@ -123,4 +123,5 @@
 
 int usb_device_get_assigned_interface(ddf_dev_t *);
+usb_address_t usb_device_get_assigned_address(devman_handle_t);
 
 int usb_endpoint_pipe_initialize(usb_endpoint_pipe_t *,
Index: uspace/lib/usb/src/pipes.c
===================================================================
--- uspace/lib/usb/src/pipes.c	(revision 206f71ae21a040a7540499adee488e4c575500b1)
+++ uspace/lib/usb/src/pipes.c	(revision c2343cc1f77b2631ad437868442f47b0d6e87985)
@@ -52,5 +52,4 @@
 	sysarg_t address;
 
-
 	/*
 	 * We are sending special value as a handle - zero - to get
@@ -94,4 +93,32 @@
 
 	return (int) iface_no;
+}
+
+/** Tell USB address assigned to given device.
+ *
+ * @param dev_handle Devman handle of the USB device in question.
+ * @return USB address or negative error code.
+ */
+usb_address_t usb_device_get_assigned_address(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;
 }
 
