Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e6bbcef0 authored by Bjørn Mork's avatar Bjørn Mork Committed by Greg Kroah-Hartman
Browse files

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: default avatarBjørn Mork <bjorn@mork.no>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 581791f5
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -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
@@ -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>
+19 −2
Original line number Diff line number Diff line
@@ -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)
{
@@ -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
@@ -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)
{