diff options
Diffstat (limited to 'drivers/usb')
-rw-r--r-- | drivers/usb/gadget/composite.c | 7 | ||||
-rw-r--r-- | drivers/usb/gadget/function/dfu.c | 2 | ||||
-rw-r--r-- | drivers/usb/gadget/function/f_acm.c | 4 | ||||
-rw-r--r-- | drivers/usb/gadget/function/f_mass_storage.c | 13 |
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; |