From 0cddbf25e8179c65a717d48bc5905d1d379c3b3d Mon Sep 17 00:00:00 2001 From: hmz007 Date: Wed, 5 Nov 2025 15:53:50 +0800 Subject: [PATCH] rockchip: notify UsbFfs on gadget add/remove events Signed-off-by: hmz007 --- hardware/rockchip/usb/usb/Usb.cpp | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/hardware/rockchip/usb/usb/Usb.cpp b/hardware/rockchip/usb/usb/Usb.cpp index 05a52958508..2c02a1e1f96 100644 --- a/hardware/rockchip/usb/usb/Usb.cpp +++ b/hardware/rockchip/usb/usb/Usb.cpp @@ -41,6 +41,8 @@ #include "Usb.h" using android::base::GetProperty; +using android::base::GetBoolProperty; +using android::base::SetProperty; using android::base::Trim; namespace aidl { @@ -682,6 +684,12 @@ static void uevent_event(uint32_t /*epevents*/, struct data *payload) { char *cp; int n; + const std::regex re_partner_add("(add)(.*)(-partner)"); + const std::regex re_gadget_add("^add@/.*usb/gadget(\\.[0-9]+)?"); + const std::regex re_gadget_remove("^remove@/.*usb/gadget(\\.[0-9]+)?"); + bool adb_override = GetBoolProperty("persist.sys.usb.adb.override", true); + static const char* kPropertyUsbDisabled = "sys.usb.adb.disabled"; + n = uevent_kernel_multicast_recv(payload->uevent_fd, msg, UEVENT_MSG_LEN); if (n <= 0) return; @@ -693,7 +701,18 @@ static void uevent_event(uint32_t /*epevents*/, struct data *payload) { cp = msg; while (*cp) { - if (std::regex_match(cp, std::regex("(add)(.*)(-partner)"))) { + if (adb_override && strstr(cp, "usb/gadget")) { + // Notify adbd usb_ffs_open_thread() + if (std::regex_search(cp, re_gadget_add)) { + ALOGD("gadget add -> resume adbd"); + SetProperty(kPropertyUsbDisabled, "0"); + } else if (std::regex_search(cp, re_gadget_remove)) { + ALOGD("gadget remove -> pause adbd"); + SetProperty(kPropertyUsbDisabled, "1"); + } + } + + if (std::regex_match(cp, re_partner_add)) { ALOGI("partner added"); pthread_mutex_lock(&payload->usb->mPartnerLock); payload->usb->mPartnerUp = true;