summaryrefslogtreecommitdiffstats
path: root/drivers/usb
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/usb')
-rw-r--r--drivers/usb/gadget/composite.c7
-rw-r--r--drivers/usb/gadget/function/dfu.c2
-rw-r--r--drivers/usb/gadget/function/f_acm.c4
-rw-r--r--drivers/usb/gadget/function/f_mass_storage.c13
4 files changed, 18 insertions, 8 deletions
diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c
index f55ae5698e..98f7b5bf7f 100644
--- a/drivers/usb/gadget/composite.c
+++ b/drivers/usb/gadget/composite.c
@@ -1509,7 +1509,7 @@ EXPORT_SYMBOL_GPL(usb_string_ids_n);
/*-------------------------------------------------------------------------*/
-static void composite_setup_complete(struct usb_ep *ep, struct usb_request *req)
+void composite_setup_complete(struct usb_ep *ep, struct usb_request *req)
{
struct usb_composite_dev *cdev;
@@ -1556,6 +1556,11 @@ static int composite_ep0_queue(struct usb_composite_dev *cdev,
return ret;
}
+int composite_queue_setup_request(struct usb_composite_dev *cdev)
+{
+ return composite_ep0_queue(cdev, cdev->req);
+}
+
static int count_ext_compat(struct usb_configuration *c)
{
int i, res;
diff --git a/drivers/usb/gadget/function/dfu.c b/drivers/usb/gadget/function/dfu.c
index 3a6d2cf385..a41ff22dce 100644
--- a/drivers/usb/gadget/function/dfu.c
+++ b/drivers/usb/gadget/function/dfu.c
@@ -807,7 +807,7 @@ out:
if (value >= 0) {
req->zero = 0;
req->length = value;
- value = usb_ep_queue(cdev->gadget->ep0, req);
+ value = composite_queue_setup_request(cdev);
if (value < 0)
ERROR(cdev, "dfu response on ttyGS%d, err %d\n",
dfu->port_num, value);
diff --git a/drivers/usb/gadget/function/f_acm.c b/drivers/usb/gadget/function/f_acm.c
index 3532fd5892..7fa0a4358f 100644
--- a/drivers/usb/gadget/function/f_acm.c
+++ b/drivers/usb/gadget/function/f_acm.c
@@ -309,6 +309,8 @@ static void acm_complete_set_line_coding(struct usb_ep *ep,
struct f_acm *acm = ep->driver_data;
struct usb_composite_dev *cdev = acm->port.func.config->cdev;
+ composite_setup_complete(ep, req);
+
if (req->status != 0) {
DBG(cdev, "acm ttyGS%d completion, err %d\n",
acm->port_num, req->status);
@@ -406,7 +408,7 @@ invalid:
w_value, w_index, w_length);
req->zero = 0;
req->length = value;
- value = usb_ep_queue(cdev->gadget->ep0, req);
+ value = composite_queue_setup_request(cdev);
if (value < 0)
ERROR(cdev, "acm response on ttyGS%d, err %d\n",
acm->port_num, value);
diff --git a/drivers/usb/gadget/function/f_mass_storage.c b/drivers/usb/gadget/function/f_mass_storage.c
index 2c934c621a..e099123cea 100644
--- a/drivers/usb/gadget/function/f_mass_storage.c
+++ b/drivers/usb/gadget/function/f_mass_storage.c
@@ -2474,14 +2474,17 @@ static int fsg_common_init(struct fsg_common *common,
struct stat st;
int fd;
- if (fentry->flags) {
- pr_err("flags not supported\n");
- rc = -ENOSYS;
- goto close;
- }
+ if (fentry->flags & ~FILE_LIST_FLAG_OPTIONAL)
+ pr_warn("some flags will be ignored\n");
fd = open(fentry->filename, flags);
if (fd < 0) {
+ if (fentry->flags & FILE_LIST_FLAG_OPTIONAL) {
+ pr_info("skipping unavailable optional partition %s\n",
+ fentry->filename);
+ continue;
+ }
+
pr_err("open('%s') failed: %pe\n",
fentry->filename, ERR_PTR(fd));
rc = fd;