From 20fe938d82746bdc3cebf85707169993ceab2c67 Mon Sep 17 00:00:00 2001 From: William Wu Date: Wed, 12 Jun 2019 15:04:06 +0800 Subject: [PATCH] usb: gadget: udc: core: fix uvc gadget disconnect issue This patch fix the issue that users fail to do a logical disconnection from the USB Host via the kernel node: /sys/class/udc//soft_connect Fixes: 3099e13bdb21 ("usb: gadget: f_uvc: support uvc and adb use independently") Change-Id: I2a19f72dc0a5dc34e430d384f5b475b488731311 Signed-off-by: William Wu --- drivers/usb/gadget/udc/core.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/drivers/usb/gadget/udc/core.c b/drivers/usb/gadget/udc/core.c index d4ce9ca37f1d..d48877e73478 100644 --- a/drivers/usb/gadget/udc/core.c +++ b/drivers/usb/gadget/udc/core.c @@ -682,11 +682,9 @@ int usb_gadget_disconnect(struct usb_gadget *gadget) goto out; } - if (!gadget->uvc_enabled) { - ret = gadget->ops->pullup(gadget, 0); - if (!ret) - gadget->connected = 0; - } + ret = gadget->ops->pullup(gadget, 0); + if (!ret) + gadget->connected = 0; out: trace_usb_gadget_disconnect(gadget, ret); @@ -713,7 +711,7 @@ int usb_gadget_deactivate(struct usb_gadget *gadget) if (gadget->deactivated) goto out; - if (gadget->connected) { + if (gadget->connected && !gadget->uvc_enabled) { ret = usb_gadget_disconnect(gadget); if (ret) goto out;