aboutsummaryrefslogtreecommitdiff
path: root/drivers/usb/gadget/configfs.c
diff options
context:
space:
mode:
authorYu Chen <chenyu56@huawei.com>2018-10-27 17:58:19 +0800
committerManivannan Sadhasivam <manivannan.sadhasivam@linaro.org>2018-11-28 15:38:34 +0530
commit5aa65d1406a97de30c945ee9008f8653eaa500fa (patch)
tree3ded1f61f570e13bbbb1ca656595f426af5f5dee /drivers/usb/gadget/configfs.c
parent8f06863262eb43db32cb59439d246e38d8dafcae (diff)
download96b-common-5aa65d1406a97de30c945ee9008f8653eaa500fa.tar.gz
usb: gadget: Add configfs attribuite for controling match_existing_only
Currently the "match_existing_only" of usb_gadget_driver in configfs is set to one which is not flexible. Dwc3 udc will be removed when usb core switch to host mode. This causes failure of writing name of dwc3 udc to configfs's UDC attribuite. To fix this we need to add a way to change the config of "match_existing_only". This patch adds a configfs attribuite for controling match_existing_only which allow user to config "match_existing_only". Cc: Felipe Balbi <balbi@kernel.org> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Cc: John Stultz <john.stultz@linaro.org> Cc: Binghui Wang <wangbinghui@hisilicon.com> Signed-off-by: Yu Chen <chenyu56@huawei.com> Signed-off-by: John Stultz <john.stultz@linaro.org>
Diffstat (limited to 'drivers/usb/gadget/configfs.c')
-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,
};