From e9c2362e33a45fdd2adfd87f12a108bfc27af980 Mon Sep 17 00:00:00 2001 From: Hemant Kumar Date: Fri, 20 Mar 2015 21:17:28 -0700 Subject: [PATCH] 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 Signed-off-by: Azhar Shaikh --- drivers/usb/gadget/composite.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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; }