From 744c86c49a9ff9e29e2193cdc5079b27d5e06ec3 Mon Sep 17 00:00:00 2001 From: Kyle Tso Date: Wed, 12 Jun 2024 17:14:02 +0800 Subject: [PATCH 1/2] usb: Add retry on role switch Bug: 341996696 Change-Id: I8caa65288af1588d24fea4aa6c5768d45d69bbd5 Signed-off-by: Kyle Tso (cherry picked from commit ef5856a4474002cc35a51377adffddd4cb239796) --- usb/usb/Usb.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/usb/usb/Usb.cpp b/usb/usb/Usb.cpp index b8c5c8ea..39cbceb5 100644 --- a/usb/usb/Usb.cpp +++ b/usb/usb/Usb.cpp @@ -593,6 +593,10 @@ ScopedAStatus Usb::switchRole(const string& in_portName, const PortRole& in_role fp = fopen(filename.c_str(), "w"); if (fp != NULL) { int ret = fputs(convertRoletoString(in_role).c_str(), fp); + if (ret == EAGAIN) { + std::this_thread::sleep_for(std::chrono::milliseconds(700)); + ret = fputs(convertRoletoString(in_role).c_str(), fp); + } fclose(fp); if ((ret != EOF) && ReadFileToString(filename, &written)) { written = Trim(written); From c5a560160fd82e94870a2252037d394e1e1f9780 Mon Sep 17 00:00:00 2001 From: Kyle Tso Date: Thu, 13 Jun 2024 16:54:37 +0800 Subject: [PATCH 2/2] usb: Log for retry on role switch Add a log for the retry. Also define the sleep time in the header file. Bug: 341996696 Change-Id: Ib3cc0c6ad576e7cda26b7f50cdc61d52e6349c78 Signed-off-by: Kyle Tso (cherry picked from commit d17fdff5f81cff76adaa75d50f26318be8048123) --- usb/usb/Usb.cpp | 3 ++- usb/usb/Usb.h | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/usb/usb/Usb.cpp b/usb/usb/Usb.cpp index 39cbceb5..0736f4c4 100644 --- a/usb/usb/Usb.cpp +++ b/usb/usb/Usb.cpp @@ -594,7 +594,8 @@ ScopedAStatus Usb::switchRole(const string& in_portName, const PortRole& in_role if (fp != NULL) { int ret = fputs(convertRoletoString(in_role).c_str(), fp); if (ret == EAGAIN) { - std::this_thread::sleep_for(std::chrono::milliseconds(700)); + ALOGI("role switch busy, retry in %d ms", ROLE_SWAP_RETRY_MS); + std::this_thread::sleep_for(std::chrono::milliseconds(ROLE_SWAP_RETRY_MS)); ret = fputs(convertRoletoString(in_role).c_str(), fp); } fclose(fp); diff --git a/usb/usb/Usb.h b/usb/usb/Usb.h index facc328e..15348af0 100644 --- a/usb/usb/Usb.h +++ b/usb/usb/Usb.h @@ -55,6 +55,8 @@ constexpr char kGadgetName[] = "11110000.dwc3"; #define VBUS_PATH NEW_UDC_PATH "dwc3_exynos_otg_b_sess" #define USB_DATA_PATH NEW_UDC_PATH "usb_data_enabled" +#define ROLE_SWAP_RETRY_MS 700 + struct Usb : public BnUsb { Usb();