浏览代码

USB: indicate active altsetting in proc/bus/usb/devices file

Update /proc/bus/usb/devices output to report active altsettings.

Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
David Brownell 18 年之前
父节点
当前提交
2360e4aa64
共有 2 个文件被更改,包括 17 次插入12 次删除
  1. 11 10
      Documentation/usb/proc_usb_info.txt
  2. 6 2
      drivers/usb/core/devices.c

+ 11 - 10
Documentation/usb/proc_usb_info.txt

@@ -213,15 +213,16 @@ C:* #Ifs=dd Cfg#=dd Atr=xx MPwr=dddmA
 
 
 Interface descriptor info (can be multiple per Config):
 Interface descriptor info (can be multiple per Config):
 
 
-I:  If#=dd Alt=dd #EPs=dd Cls=xx(sssss) Sub=xx Prot=xx Driver=ssss
-|   |      |      |       |             |      |       |__Driver name
-|   |      |      |       |             |      |          or "(none)"
-|   |      |      |       |             |      |__InterfaceProtocol
-|   |      |      |       |             |__InterfaceSubClass
-|   |      |      |       |__InterfaceClass
-|   |      |      |__NumberOfEndpoints
-|   |      |__AlternateSettingNumber
-|   |__InterfaceNumber
+I:* If#=dd Alt=dd #EPs=dd Cls=xx(sssss) Sub=xx Prot=xx Driver=ssss
+| | |      |      |       |             |      |       |__Driver name
+| | |      |      |       |             |      |          or "(none)"
+| | |      |      |       |             |      |__InterfaceProtocol
+| | |      |      |       |             |__InterfaceSubClass
+| | |      |      |       |__InterfaceClass
+| | |      |      |__NumberOfEndpoints
+| | |      |__AlternateSettingNumber
+| | |__InterfaceNumber
+| |__ "*" indicates the active altsetting (others are " ")
 |__Interface info tag
 |__Interface info tag
 
 
     A given interface may have one or more "alternate" settings.
     A given interface may have one or more "alternate" settings.
@@ -277,7 +278,7 @@ of the USB devices on a system's root hub.  (See more below
 on how to do this.)
 on how to do this.)
 
 
 The Interface lines can be used to determine what driver is
 The Interface lines can be used to determine what driver is
-being used for each device.
+being used for each device, and which altsetting it activated.
 
 
 The Configuration lines could be used to list maximum power
 The Configuration lines could be used to list maximum power
 (in milliamps) that a system's USB devices are using.
 (in milliamps) that a system's USB devices are using.

+ 6 - 2
drivers/usb/core/devices.c

@@ -104,7 +104,7 @@ static const char *format_config =
   
   
 static const char *format_iface =
 static const char *format_iface =
 /* I:  If#=dd Alt=dd #EPs=dd Cls=xx(sssss) Sub=xx Prot=xx Driver=xxxx*/
 /* I:  If#=dd Alt=dd #EPs=dd Cls=xx(sssss) Sub=xx Prot=xx Driver=xxxx*/
-  "I:  If#=%2d Alt=%2d #EPs=%2d Cls=%02x(%-5s) Sub=%02x Prot=%02x Driver=%s\n";
+  "I:%c If#=%2d Alt=%2d #EPs=%2d Cls=%02x(%-5s) Sub=%02x Prot=%02x Driver=%s\n";
 
 
 static const char *format_endpt =
 static const char *format_endpt =
 /* E:  Ad=xx(s) Atr=xx(ssss) MxPS=dddd Ivl=D?s */
 /* E:  Ad=xx(s) Atr=xx(ssss) MxPS=dddd Ivl=D?s */
@@ -242,15 +242,19 @@ static char *usb_dump_interface_descriptor(char *start, char *end,
 {
 {
 	const struct usb_interface_descriptor *desc = &intfc->altsetting[setno].desc;
 	const struct usb_interface_descriptor *desc = &intfc->altsetting[setno].desc;
 	const char *driver_name = "";
 	const char *driver_name = "";
+	int active = 0;
 
 
 	if (start > end)
 	if (start > end)
 		return start;
 		return start;
 	down_read(&usb_bus_type.subsys.rwsem);
 	down_read(&usb_bus_type.subsys.rwsem);
-	if (iface)
+	if (iface) {
 		driver_name = (iface->dev.driver
 		driver_name = (iface->dev.driver
 				? iface->dev.driver->name
 				? iface->dev.driver->name
 				: "(none)");
 				: "(none)");
+		active = (desc == &iface->cur_altsetting->desc);
+	}
 	start += sprintf(start, format_iface,
 	start += sprintf(start, format_iface,
+			 active ? '*' : ' ',	/* mark active altsetting */
 			 desc->bInterfaceNumber,
 			 desc->bInterfaceNumber,
 			 desc->bAlternateSetting,
 			 desc->bAlternateSetting,
 			 desc->bNumEndpoints,
 			 desc->bNumEndpoints,