aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/usb/gadget/configfs.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/drivers/usb/gadget/configfs.c b/drivers/usb/gadget/configfs.c
index 025129942894..c82b7bc98dea 100644
--- a/drivers/usb/gadget/configfs.c
+++ b/drivers/usb/gadget/configfs.c
@@ -291,6 +291,36 @@ err:
return ret;
}
+static ssize_t gadget_driver_match_existing_only_store(struct config_item *item,
+ const char *page, size_t len)
+{
+ struct usb_gadget_driver *gadget_driver =
+ &(to_gadget_info(item)->composite.gadget_driver);
+ bool match_existing_only;
+ int ret;
+
+ ret = kstrtobool(page, &match_existing_only);
+ if (ret)
+ return ret;
+
+ if (match_existing_only)
+ gadget_driver->match_existing_only = 1;
+ else
+ gadget_driver->match_existing_only = 0;
+
+ return len;
+}
+
+static ssize_t gadget_driver_match_existing_only_show(struct config_item *item,
+ char *page)
+{
+ struct usb_gadget_driver *gadget_driver =
+ &(to_gadget_info(item)->composite.gadget_driver);
+ bool match_existing_only = !!gadget_driver->match_existing_only;
+
+ return sprintf(page, "%s\n", match_existing_only ? "true" : "false");
+}
+
CONFIGFS_ATTR(gadget_dev_desc_, bDeviceClass);
CONFIGFS_ATTR(gadget_dev_desc_, bDeviceSubClass);
CONFIGFS_ATTR(gadget_dev_desc_, bDeviceProtocol);
@@ -300,6 +330,7 @@ CONFIGFS_ATTR(gadget_dev_desc_, idProduct);
CONFIGFS_ATTR(gadget_dev_desc_, bcdDevice);
CONFIGFS_ATTR(gadget_dev_desc_, bcdUSB);
CONFIGFS_ATTR(gadget_dev_desc_, UDC);
+CONFIGFS_ATTR(gadget_, driver_match_existing_only);
static struct configfs_attribute *gadget_root_attrs[] = {
&gadget_dev_desc_attr_bDeviceClass,
@@ -311,6 +342,7 @@ static struct configfs_attribute *gadget_root_attrs[] = {
&gadget_dev_desc_attr_bcdDevice,
&gadget_dev_desc_attr_bcdUSB,
&gadget_dev_desc_attr_UDC,
+ &gadget_attr_driver_match_existing_only,
NULL,
};