diff mbox series

[v2,4/7] usb: bdc: Adb shows offline after resuming from S2

Message ID 20200721144326.7976-5-alcooperx@gmail.com (mailing list archive)
State Superseded
Headers show
Series usb: bdc: Updates and fixes to the USB BDC driver | expand

Commit Message

Alan Cooper July 21, 2020, 2:43 p.m. UTC
On Android systems, After temporarily putting device to S2 by
short pressing the power button on the remote, the display turns
off. Then press the power button to turn the display back up. Adb
devices would show the devices is offline. It needs a physical
disconnect of the usb cable or power cycle to bring the device
back online. The device is operational otherwise.

The problem is that during S2 resume, the ADB gadget driver could
not link back with the BDC driver because the endpoint flags were
cleared. The fix is to clear the endpoint flags for the disconnect
case only and not for S2 exit.

Signed-off-by: Al Cooper <alcooperx@gmail.com>
---
 drivers/usb/gadget/udc/bdc/bdc_core.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

Comments

Florian Fainelli July 21, 2020, 5:33 p.m. UTC | #1
On 7/21/20 7:43 AM, Al Cooper wrote:
> On Android systems, After temporarily putting device to S2 by
> short pressing the power button on the remote, the display turns
> off. Then press the power button to turn the display back up. Adb
> devices would show the devices is offline. It needs a physical
> disconnect of the usb cable or power cycle to bring the device
> back online. The device is operational otherwise.
> 
> The problem is that during S2 resume, the ADB gadget driver could
> not link back with the BDC driver because the endpoint flags were
> cleared. The fix is to clear the endpoint flags for the disconnect
> case only and not for S2 exit.
> 
> Signed-off-by: Al Cooper <alcooperx@gmail.com>

Acked-by: Florian Fainelli <f.fainelli@gmail.com>
diff mbox series

Patch

diff --git a/drivers/usb/gadget/udc/bdc/bdc_core.c b/drivers/usb/gadget/udc/bdc/bdc_core.c
index b70b438efff4..2c2f7aef7ba7 100644
--- a/drivers/usb/gadget/udc/bdc/bdc_core.c
+++ b/drivers/usb/gadget/udc/bdc/bdc_core.c
@@ -292,9 +292,13 @@  static void bdc_mem_init(struct bdc *bdc, bool reinit)
 		/* Initialize SRR to 0 */
 		memset(bdc->srr.sr_bds, 0,
 					NUM_SR_ENTRIES * sizeof(struct bdc_bd));
-		/* clear ep flags to avoid post disconnect stops/deconfigs */
-		for (i = 1; i < bdc->num_eps; ++i)
-			bdc->bdc_ep_array[i]->flags = 0;
+		/*
+		 * clear ep flags to avoid post disconnect stops/deconfigs but
+		 * not during S2 exit
+		 */
+		if (!bdc->gadget.speed)
+			for (i = 1; i < bdc->num_eps; ++i)
+				bdc->bdc_ep_array[i]->flags = 0;
 	} else {
 		/* One time initiaization only */
 		/* Enable status report function pointers */