summaryrefslogtreecommitdiff
path: root/drivers/usb/gadget/composite.c
diff options
context:
space:
mode:
authorHemant Kumar <hemantk@codeaurora.org>2015-03-20 21:17:28 -0700
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-22 11:02:50 -0700
commite9c2362e33a45fdd2adfd87f12a108bfc27af980 (patch)
tree39010102bdb5d6758283027f093979d6c5165818 /drivers/usb/gadget/composite.c
parentd025d9d53023d9f411d3f1dcf72712ae8fa5a552 (diff)
usb: gadget: Invalidate interface id upon adding function to config
Commit e9df68ade ("usb: gadget: f_mbim: Queue notification request upon function resume") added variable to store interface id in usb_interface_id(). This interface id is used to send function wake device notification. Functions having control interface and data interface calls usb_interface_id() twice causing invalid interface index stored in the variable. This is causing remote wakeup failure. Fix this issue by initializing variable to -EINVAL and set it to interface index only when it is invalidated. CRs-Fixed: 810737 Change-Id: I41bce0a71ce0b8e92f3736d4e292132ce16de021 Signed-off-by: Hemant Kumar <hemantk@codeaurora.org> Signed-off-by: Azhar Shaikh <azhars@codeaurora.org>
Diffstat (limited to 'drivers/usb/gadget/composite.c')
-rw-r--r--drivers/usb/gadget/composite.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c
index 9b1b43a80b14..e4704330030f 100644
--- a/drivers/usb/gadget/composite.c
+++ b/drivers/usb/gadget/composite.c
@@ -208,6 +208,7 @@ int usb_add_function(struct usb_configuration *config,
goto done;
function->config = config;
+ function->intf_id = -EINVAL;
list_add_tail(&function->list, &config->functions);
if (function->bind_deactivated) {
@@ -356,7 +357,8 @@ int usb_interface_id(struct usb_configuration *config,
if (id < MAX_CONFIG_INTERFACES) {
config->interface[id] = function;
- function->intf_id = id;
+ if (function->intf_id < 0)
+ function->intf_id = id;
config->next_interface_id = id + 1;
return id;
}