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: Bjørn Mork <bjorn@mork.no> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Родитель
581791f5c7
Коммит
e6bbcef021
|
@ -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:
|
||||||
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,
|
||||||
}
|
}
|
||||||
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,
|
||||||
|
|
||||||
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)
|
||||||
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)
|
||||||
{
|
{
|
||||||
|
|
Загрузка…
Ссылка в новой задаче