diff options
author | Thinh Nguyen <Thinh.Nguyen@synopsys.com> | 2024-02-16 00:41:02 +0000 |
---|---|---|
committer | Norihiko Hama <Norihiko.Hama@alpsalpine.com> | 2024-03-27 10:22:55 +0900 |
commit | a77f9293e056b9fa14f20ed7c31ed0a39a980bd3 (patch) | |
tree | 4352172571107e7bfdd72238aef9293141b79484 | |
parent | 7a3f32b674cd5d7a44b5d2d51b8d8492168309ff (diff) | |
download | common-a77f9293e056b9fa14f20ed7c31ed0a39a980bd3.tar.gz |
UPSTREAM: usb: dwc3: gadget: Don't disconnect if not startedandroid13-5.15-2024-03_r2
commit b191a18cb5c47109ca696370a74a5062a70adfd0 upstream.
Don't go through soft-disconnection sequence if the controller hasn't
started. Otherwise, there will be timeout and warning reports from the
soft-disconnection flow.
Cc: stable@vger.kernel.org
Fixes: 61a348857e86 ("usb: dwc3: gadget: Fix NULL pointer dereference in dwc3_gadget_suspend")
Reported-by: Marek Szyprowski <m.szyprowski@samsung.com>
Closes: https://lore.kernel.org/linux-usb/20240215233536.7yejlj3zzkl23vjd@synopsys.com/T/#mb0661cd5f9272602af390c18392b9a36da4f96e6
Tested-by: Marek Szyprowski <m.szyprowski@samsung.com>
Bug: 331142111
Bug: 331022424
Change-Id: Ic048c261cf6a053c12f6895c58736308ac2c3c57
(cherry picked from commit c98f2d25f8f64392e993e455033ba1befafbb583)
Signed-off-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
Link: https://lore.kernel.org/r/e3be9b929934e0680a6f4b8f6eb11b18ae9c7e07.1708043922.git.Thinh.Nguyen@synopsys.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Norihiko Hama <Norihiko.Hama@alpsalpine.com>
-rw-r--r-- | drivers/usb/dwc3/gadget.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index 43559d6f70e1..e2ab70d77141 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -2534,6 +2534,11 @@ static int dwc3_gadget_soft_disconnect(struct dwc3 *dwc) int ret; spin_lock_irqsave(&dwc->lock, flags); + if (!dwc->pullups_connected) { + spin_unlock_irqrestore(&dwc->lock, flags); + return 0; + } + dwc->connected = false; /* |