Loading Documentation/ABI/testing/sysfs-bus-usb +15 −0 Original line number Diff line number Diff line Loading @@ -135,6 +135,17 @@ Description: for the device and attempt to bind to it. For example: # 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 Date: October 2011 Contact: linux-usb@vger.kernel.org Loading @@ -157,6 +168,10 @@ Description: match the driver to the device. For example: # 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 Date: December 2009 Contact: Oliver Neukum <oliver@neukum.org> Loading drivers/usb/core/driver.c +19 −2 Original line number Diff line number Diff line Loading @@ -79,6 +79,23 @@ ssize_t usb_store_new_id(struct usb_dynids *dynids, } 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, const char *buf, size_t count) { Loading @@ -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); } 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 Loading Loading @@ -127,7 +144,7 @@ store_remove_id(struct device_driver *driver, const char *buf, size_t count) return retval; 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) { Loading Loading
Documentation/ABI/testing/sysfs-bus-usb +15 −0 Original line number Diff line number Diff line Loading @@ -135,6 +135,17 @@ Description: for the device and attempt to bind to it. For example: # 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 Date: October 2011 Contact: linux-usb@vger.kernel.org Loading @@ -157,6 +168,10 @@ Description: match the driver to the device. For example: # 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 Date: December 2009 Contact: Oliver Neukum <oliver@neukum.org> Loading
drivers/usb/core/driver.c +19 −2 Original line number Diff line number Diff line Loading @@ -79,6 +79,23 @@ ssize_t usb_store_new_id(struct usb_dynids *dynids, } 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, const char *buf, size_t count) { Loading @@ -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); } 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 Loading Loading @@ -127,7 +144,7 @@ store_remove_id(struct device_driver *driver, const char *buf, size_t count) return retval; 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) { Loading