mirror of
https://github.com/armbian/build
synced 2025-09-24 19:47:06 +07:00
89 lines
2.5 KiB
Diff
89 lines
2.5 KiB
Diff
From bfaf13fd69401d5c6e0f512277e3f84bd12b1036 Mon Sep 17 00:00:00 2001
|
|
From: Ondrej Jirman <megi@xff.cz>
|
|
Date: Sat, 9 Aug 2025 10:10:42 +0200
|
|
Subject: Revert "usb: dwc3: Abort suspend on soft disconnect failure"
|
|
|
|
This reverts commit 630a1dec3b0eba2a695b9063f1c205d585cbfec9.
|
|
---
|
|
drivers/usb/dwc3/core.c | 9 ++-------
|
|
drivers/usb/dwc3/gadget.c | 22 +++++++++++++---------
|
|
2 files changed, 15 insertions(+), 16 deletions(-)
|
|
|
|
diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
|
|
index 8002c23a5a02..2bc775a747f2 100644
|
|
--- a/drivers/usb/dwc3/core.c
|
|
+++ b/drivers/usb/dwc3/core.c
|
|
@@ -2422,7 +2422,6 @@ static int dwc3_suspend_common(struct dwc3 *dwc, pm_message_t msg)
|
|
{
|
|
u32 reg;
|
|
int i;
|
|
- int ret;
|
|
|
|
if (!pm_runtime_suspended(dwc->dev) && !PMSG_IS_AUTO(msg)) {
|
|
dwc->susphy_state = (dwc3_readl(dwc->regs, DWC3_GUSB2PHYCFG(0)) &
|
|
@@ -2441,9 +2440,7 @@ static int dwc3_suspend_common(struct dwc3 *dwc, pm_message_t msg)
|
|
case DWC3_GCTL_PRTCAP_DEVICE:
|
|
if (pm_runtime_suspended(dwc->dev))
|
|
break;
|
|
- ret = dwc3_gadget_suspend(dwc);
|
|
- if (ret)
|
|
- return ret;
|
|
+ dwc3_gadget_suspend(dwc);
|
|
synchronize_irq(dwc->irq_gadget);
|
|
dwc3_core_exit(dwc);
|
|
break;
|
|
@@ -2478,9 +2475,7 @@ static int dwc3_suspend_common(struct dwc3 *dwc, pm_message_t msg)
|
|
break;
|
|
|
|
if (dwc->current_otg_role == DWC3_OTG_ROLE_DEVICE) {
|
|
- ret = dwc3_gadget_suspend(dwc);
|
|
- if (ret)
|
|
- return ret;
|
|
+ dwc3_gadget_suspend(dwc);
|
|
synchronize_irq(dwc->irq_gadget);
|
|
}
|
|
|
|
diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
|
|
index 6ab6c9f163b8..41a31d02de87 100644
|
|
--- a/drivers/usb/dwc3/gadget.c
|
|
+++ b/drivers/usb/dwc3/gadget.c
|
|
@@ -4836,15 +4836,8 @@ int dwc3_gadget_suspend(struct dwc3 *dwc)
|
|
int ret;
|
|
|
|
ret = dwc3_gadget_soft_disconnect(dwc);
|
|
- /*
|
|
- * Attempt to reset the controller's state. Likely no
|
|
- * communication can be established until the host
|
|
- * performs a port reset.
|
|
- */
|
|
- if (ret && dwc->softconnect) {
|
|
- dwc3_gadget_soft_connect(dwc);
|
|
- return -EAGAIN;
|
|
- }
|
|
+ if (ret)
|
|
+ goto err;
|
|
|
|
spin_lock_irqsave(&dwc->lock, flags);
|
|
if (dwc->gadget_driver)
|
|
@@ -4852,6 +4845,17 @@ int dwc3_gadget_suspend(struct dwc3 *dwc)
|
|
spin_unlock_irqrestore(&dwc->lock, flags);
|
|
|
|
return 0;
|
|
+
|
|
+err:
|
|
+ /*
|
|
+ * Attempt to reset the controller's state. Likely no
|
|
+ * communication can be established until the host
|
|
+ * performs a port reset.
|
|
+ */
|
|
+ if (dwc->softconnect)
|
|
+ dwc3_gadget_soft_connect(dwc);
|
|
+
|
|
+ return ret;
|
|
}
|
|
|
|
int dwc3_gadget_resume(struct dwc3 *dwc)
|
|
--
|
|
2.51.0
|
|
|