Index: uspace/app/usbinfo/info.c
===================================================================
--- uspace/app/usbinfo/info.c	(revision eece17846304a7204ddf005528c4aca9ad6421eb)
+++ uspace/app/usbinfo/info.c	(revision 0e45e7fa915cd4a37d7351ea9a57df93887bed40)
@@ -166,5 +166,5 @@
 
 
-static void dump_descriptor_tree_brief_callback(uint8_t *descriptor,
+static void dump_descriptor_tree_callback(uint8_t *descriptor,
     size_t depth, void *arg)
 {
@@ -183,4 +183,9 @@
 		if (descr_size >= sizeof(descriptor_type)) { \
 			callback(indent, (descriptor_type *) descriptor); \
+			if (arg != NULL) { \
+				usb_dump_standard_descriptor(stdout, \
+				    get_indent(depth +2), "\n", \
+				    descriptor, descr_size); \
+			} \
 		} else { \
 			descr_type = -1; \
@@ -222,12 +227,24 @@
 void dump_descriptor_tree_brief(usbinfo_device_t *dev)
 {
-	dump_descriptor_tree_brief_callback((uint8_t *)&dev->device_descriptor,
+	dump_descriptor_tree_callback((uint8_t *)&dev->device_descriptor,
 	    (size_t) -1, NULL);
 	usb_dp_walk_simple(dev->full_configuration_descriptor,
 	    dev->full_configuration_descriptor_size,
 	    usb_dp_standard_descriptor_nesting,
-	    dump_descriptor_tree_brief_callback,
+	    dump_descriptor_tree_callback,
 	    NULL);
 }
+
+void dump_descriptor_tree_full(usbinfo_device_t *dev)
+{
+	dump_descriptor_tree_callback((uint8_t *)&dev->device_descriptor,
+	    (size_t) -1, dev);
+	usb_dp_walk_simple(dev->full_configuration_descriptor,
+	    dev->full_configuration_descriptor_size,
+	    usb_dp_standard_descriptor_nesting,
+	    dump_descriptor_tree_callback,
+	    dev);
+}
+
 
 void dump_strings(usbinfo_device_t *dev)
Index: uspace/app/usbinfo/main.c
===================================================================
--- uspace/app/usbinfo/main.c	(revision eece17846304a7204ddf005528c4aca9ad6421eb)
+++ uspace/app/usbinfo/main.c	(revision 0e45e7fa915cd4a37d7351ea9a57df93887bed40)
@@ -134,4 +134,5 @@
 	_OPTION("-m --match-ids", "Print match ids generated for the device.");
 	_OPTION("-t --descriptor-tree", "Print descriptor tree.");
+	_OPTION("-T --descriptor-tree-full", "Print detailed descriptor tree");
 	_OPTION("-s --strings", "Try to print all string descriptors.");
 
@@ -149,8 +150,9 @@
 	{"match-ids", no_argument, NULL, 'm'},
 	{"descriptor-tree", no_argument, NULL, 't'},
+	{"descriptor-tree-full", no_argument, NULL, 'T'},
 	{"strings", no_argument, NULL, 's'},
 	{0, 0, NULL, 0}
 };
-static const char *short_options = "himts";
+static const char *short_options = "himtTs";
 
 static usbinfo_action_t actions[] = {
@@ -168,4 +170,9 @@
 		.opt = 't',
 		.action = dump_descriptor_tree_brief,
+		.active = false
+	},
+	{
+		.opt = 'T',
+		.action = dump_descriptor_tree_full,
 		.active = false
 	},
Index: uspace/app/usbinfo/usbinfo.h
===================================================================
--- uspace/app/usbinfo/usbinfo.h	(revision eece17846304a7204ddf005528c4aca9ad6421eb)
+++ uspace/app/usbinfo/usbinfo.h	(revision 0e45e7fa915cd4a37d7351ea9a57df93887bed40)
@@ -82,4 +82,5 @@
 void dump_device_match_ids(usbinfo_device_t *);
 void dump_descriptor_tree_brief(usbinfo_device_t *);
+void dump_descriptor_tree_full(usbinfo_device_t *);
 void dump_strings(usbinfo_device_t *);
 
