mirror of
https://github.com/armbian/build
synced 2025-09-24 19:47:06 +07:00
90 lines
2.5 KiB
Diff
90 lines
2.5 KiB
Diff
From 48c707b5f50a1cd87925a725e5c85ac06b19219f Mon Sep 17 00:00:00 2001
|
|
From: Ondrej Jirman <megi@xff.cz>
|
|
Date: Sat, 9 Aug 2025 10:10:42 +0200
|
|
Subject: [PATCH 2/3] 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 91dec9c81a40..1e436ac6a1fa 100644
|
|
--- a/drivers/usb/dwc3/core.c
|
|
+++ b/drivers/usb/dwc3/core.c
|
|
@@ -2460,7 +2460,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)) &
|
|
@@ -2480,9 +2479,7 @@ static int dwc3_suspend_common(struct dwc3 *dwc, pm_message_t msg)
|
|
case DWC3_GCTL_PRTCAP_DEVICE_DISCONNECTED:
|
|
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;
|
|
@@ -2517,9 +2514,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 74968f93d4a3..99fbd29d8f46 100644
|
|
--- a/drivers/usb/dwc3/gadget.c
|
|
+++ b/drivers/usb/dwc3/gadget.c
|
|
@@ -4821,15 +4821,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)
|
|
@@ -4837,6 +4830,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
|
|
|