Index: uspace/lib/usbdev/include/usb/dev/driver.h
===================================================================
--- uspace/lib/usbdev/include/usb/dev/driver.h	(revision 49ce81020afe7e144c1252aebc5ab58d4f59fd30)
+++ uspace/lib/usbdev/include/usb/dev/driver.h	(revision d600874ce7eda77c5fbf86f9c4d1153ddae844da)
@@ -168,4 +168,5 @@
 int usb_device_destroy_pipes(ddf_dev_t *, usb_endpoint_mapping_t *, size_t);
 int usb_device_create(ddf_dev_t *, usb_endpoint_description_t **, usb_device_t **, const char **);
+void usb_device_destroy(usb_device_t *);
 
 size_t usb_interface_count_alternates(uint8_t *, size_t, uint8_t);
Index: uspace/lib/usbdev/src/devdrv.c
===================================================================
--- uspace/lib/usbdev/src/devdrv.c	(revision 49ce81020afe7e144c1252aebc5ab58d4f59fd30)
+++ uspace/lib/usbdev/src/devdrv.c	(revision d600874ce7eda77c5fbf86f9c4d1153ddae844da)
@@ -533,4 +533,30 @@
 }
 
+/** Destroy instance of a USB device.
+ *
+ * @param dev Device to be destroyed.
+ */
+void usb_device_destroy(usb_device_t *dev)
+{
+	if (dev == NULL) {
+		return;
+	}
+
+	/* Ignore errors and hope for the best. */
+	usb_device_destroy_pipes(dev->ddf_dev, dev->pipes, dev->pipes_count);
+	if (dev->descriptors.configuration != NULL) {
+		free(dev->descriptors.configuration);
+	}
+
+	if (dev->alternate_interfaces != NULL) {
+		if (dev->alternate_interfaces->alternatives != NULL) {
+			free(dev->alternate_interfaces->alternatives);
+		}
+		free(dev->alternate_interfaces);
+	}
+
+	free(dev);
+}
+
 /**
  * @}
