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

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

USB: add read support to usb-serial/../new_id



Keep the usb-serial support for dynamic IDs in sync with the usb
support.  This enables readout of dynamic device IDs for
usb-serial drivers.  Common code is exported from the usb core
system and reused by the usb-serial bus driver.

Signed-off-by: default avatarBjørn Mork <bjorn@mork.no>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent e6bbcef0
Loading
Loading
Loading
Loading
+10 −3
Original line number Diff line number Diff line
@@ -79,13 +79,12 @@ 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)
ssize_t usb_show_dynids(struct usb_dynids *dynids, 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)
	list_for_each_entry(dynid, &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,
@@ -95,6 +94,14 @@ static ssize_t show_dynids(struct device_driver *driver, char *buf)
					   dynid->id.idVendor, dynid->id.idProduct);
	return count;
}
EXPORT_SYMBOL_GPL(usb_show_dynids);

static ssize_t show_dynids(struct device_driver *driver, char *buf)
{
	struct usb_driver *usb_drv = to_usb_driver(driver);

	return usb_show_dynids(&usb_drv->dynids, buf);
}

static ssize_t store_new_id(struct device_driver *driver,
			    const char *buf, size_t count)
+8 −1
Original line number Diff line number Diff line
@@ -124,8 +124,15 @@ static ssize_t store_new_id(struct device_driver *driver,
	return retval;
}

static ssize_t show_dynids(struct device_driver *driver, char *buf)
{
	struct usb_serial_driver *usb_drv = to_usb_serial_driver(driver);

	return usb_show_dynids(&usb_drv->dynids, buf);
}

static struct driver_attribute drv_attrs[] = {
	__ATTR(new_id, S_IWUSR, NULL, store_new_id),
	__ATTR(new_id, S_IRUGO | S_IWUSR, show_dynids, store_new_id),
	__ATTR_NULL,
};

+2 −0
Original line number Diff line number Diff line
@@ -790,6 +790,8 @@ extern ssize_t usb_store_new_id(struct usb_dynids *dynids,
				struct device_driver *driver,
				const char *buf, size_t count);

extern ssize_t usb_show_dynids(struct usb_dynids *dynids, char *buf);

/**
 * struct usbdrv_wrap - wrapper for driver-model structure
 * @driver: The driver-model core driver structure.