提交 e6bbcef0 编写于 作者: B Bjørn Mork 提交者: Greg Kroah-Hartman

USB: let both new_id and remove_id show dynamic id list

This enables the current list of dynamic IDs to be read out through
either new_id or remove_id.
Signed-off-by: NBjørn Mork <bjorn@mork.no>
Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
上级 581791f5
...@@ -135,6 +135,17 @@ Description: ...@@ -135,6 +135,17 @@ Description:
for the device and attempt to bind to it. For example: for the device and attempt to bind to it. For example:
# echo "8086 10f5" > /sys/bus/usb/drivers/foo/new_id # echo "8086 10f5" > /sys/bus/usb/drivers/foo/new_id
Reading from this file will list all dynamically added
device IDs in the same format, with one entry per
line. For example:
# cat /sys/bus/usb/drivers/foo/new_id
8086 10f5
dead beef 06
f00d cafe
The list will be truncated at PAGE_SIZE bytes due to
sysfs restrictions.
What: /sys/bus/usb-serial/drivers/.../new_id What: /sys/bus/usb-serial/drivers/.../new_id
Date: October 2011 Date: October 2011
Contact: linux-usb@vger.kernel.org Contact: linux-usb@vger.kernel.org
...@@ -157,6 +168,10 @@ Description: ...@@ -157,6 +168,10 @@ Description:
match the driver to the device. For example: match the driver to the device. For example:
# echo "046d c315" > /sys/bus/usb/drivers/foo/remove_id # echo "046d c315" > /sys/bus/usb/drivers/foo/remove_id
Reading from this file will list the dynamically added
device IDs, exactly like reading from the entry
"/sys/bus/usb/drivers/.../new_id"
What: /sys/bus/usb/device/.../avoid_reset_quirk What: /sys/bus/usb/device/.../avoid_reset_quirk
Date: December 2009 Date: December 2009
Contact: Oliver Neukum <oliver@neukum.org> Contact: Oliver Neukum <oliver@neukum.org>
......
...@@ -79,6 +79,23 @@ ssize_t usb_store_new_id(struct usb_dynids *dynids, ...@@ -79,6 +79,23 @@ ssize_t usb_store_new_id(struct usb_dynids *dynids,
} }
EXPORT_SYMBOL_GPL(usb_store_new_id); EXPORT_SYMBOL_GPL(usb_store_new_id);
static ssize_t show_dynids(struct device_driver *driver, char *buf)
{
struct usb_dynid *dynid;
struct usb_driver *usb_drv = to_usb_driver(driver);
size_t count = 0;
list_for_each_entry(dynid, &usb_drv->dynids.list, node)
if (dynid->id.bInterfaceClass != 0)
count += scnprintf(&buf[count], PAGE_SIZE - count, "%04x %04x %02x\n",
dynid->id.idVendor, dynid->id.idProduct,
dynid->id.bInterfaceClass);
else
count += scnprintf(&buf[count], PAGE_SIZE - count, "%04x %04x\n",
dynid->id.idVendor, dynid->id.idProduct);
return count;
}
static ssize_t store_new_id(struct device_driver *driver, static ssize_t store_new_id(struct device_driver *driver,
const char *buf, size_t count) const char *buf, size_t count)
{ {
...@@ -86,7 +103,7 @@ static ssize_t store_new_id(struct device_driver *driver, ...@@ -86,7 +103,7 @@ static ssize_t store_new_id(struct device_driver *driver,
return usb_store_new_id(&usb_drv->dynids, driver, buf, count); return usb_store_new_id(&usb_drv->dynids, driver, buf, count);
} }
static DRIVER_ATTR(new_id, S_IWUSR, NULL, store_new_id); static DRIVER_ATTR(new_id, S_IRUGO | S_IWUSR, show_dynids, store_new_id);
/** /**
* store_remove_id - remove a USB device ID from this driver * store_remove_id - remove a USB device ID from this driver
...@@ -127,7 +144,7 @@ store_remove_id(struct device_driver *driver, const char *buf, size_t count) ...@@ -127,7 +144,7 @@ store_remove_id(struct device_driver *driver, const char *buf, size_t count)
return retval; return retval;
return count; return count;
} }
static DRIVER_ATTR(remove_id, S_IWUSR, NULL, store_remove_id); static DRIVER_ATTR(remove_id, S_IRUGO | S_IWUSR, show_dynids, store_remove_id);
static int usb_create_newid_files(struct usb_driver *usb_drv) static int usb_create_newid_files(struct usb_driver *usb_drv)
{ {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册