Write the pullup value only if new value applied

Also, remove the non-existing paths and set the initial value of
mUsbDataEnabled.

Bug: 221009551
Test: build, boot
Signed-off-by: Jimmy Hu <hhhuuu@google.com>
Change-Id: Ia44923b13d7a6a381d0024df4e7af5ac0667f0ef
This commit is contained in:
Jimmy Hu
2022-05-24 07:36:17 +00:00
parent cb01b82b5a
commit d968247718
2 changed files with 23 additions and 22 deletions

View File

@@ -61,40 +61,41 @@ ScopedAStatus Usb::enableUsbData(const string& in_portName, bool in_enable,
int64_t in_transactionId) { int64_t in_transactionId) {
bool result = true; bool result = true;
std::vector<PortStatus> currentPortStatus; std::vector<PortStatus> currentPortStatus;
string pullup;
ALOGI("Userspace turn %s USB data signaling. opID:%ld", in_enable ? "on" : "off", ALOGI("Userspace turn %s USB data signaling. opID:%ld", in_enable ? "on" : "off",
in_transactionId); in_transactionId);
if (in_enable) { if (in_enable) {
if (ReadFileToString(PULLUP_PATH, &pullup)) {
pullup = Trim(pullup);
if (pullup != kGadgetName) {
if (!WriteStringToFile(kGadgetName, PULLUP_PATH)) {
ALOGE("Gadget cannot be pulled up");
result = false;
}
}
}
if (!WriteStringToFile("1", USB_DATA_PATH)) { if (!WriteStringToFile("1", USB_DATA_PATH)) {
ALOGE("Not able to turn on usb connection notification"); ALOGE("Not able to turn on usb connection notification");
result = false; result = false;
} }
if (!WriteStringToFile(kGadgetName, PULLUP_PATH)) {
ALOGE("Gadget cannot be pulled up");
result = false;
}
} else { } else {
if (!WriteStringToFile("1", ID_PATH)) { if (ReadFileToString(PULLUP_PATH, &pullup)) {
ALOGE("Not able to turn off host mode"); pullup = Trim(pullup);
result = false; if (pullup == kGadgetName) {
} if (!WriteStringToFile("none", PULLUP_PATH)) {
ALOGE("Gadget cannot be pulled down");
if (!WriteStringToFile("0", VBUS_PATH)) { result = false;
ALOGE("Not able to set Vbus state"); }
result = false; }
} }
if (!WriteStringToFile("0", USB_DATA_PATH)) { if (!WriteStringToFile("0", USB_DATA_PATH)) {
ALOGE("Not able to turn on usb connection notification"); ALOGE("Not able to turn on usb connection notification");
result = false; result = false;
} }
if (!WriteStringToFile("none", PULLUP_PATH)) {
ALOGE("Gadget cannot be pulled down");
result = false;
}
} }
if (result) { if (result) {
@@ -367,7 +368,8 @@ Usb::Usb()
: mLock(PTHREAD_MUTEX_INITIALIZER), : mLock(PTHREAD_MUTEX_INITIALIZER),
mRoleSwitchLock(PTHREAD_MUTEX_INITIALIZER), mRoleSwitchLock(PTHREAD_MUTEX_INITIALIZER),
mPartnerLock(PTHREAD_MUTEX_INITIALIZER), mPartnerLock(PTHREAD_MUTEX_INITIALIZER),
mPartnerUp(false) { mPartnerUp(false),
mUsbDataEnabled(true) {
pthread_condattr_t attr; pthread_condattr_t attr;
if (pthread_condattr_init(&attr)) { if (pthread_condattr_init(&attr)) {
ALOGE("pthread_condattr_init failed: %s", strerror(errno)); ALOGE("pthread_condattr_init failed: %s", strerror(errno));
@@ -612,7 +614,7 @@ Status getPortStatusHelper(android::hardware::usb::Usb *usb,
} else { } else {
(*currentPortStatus)[i].usbDataStatus.push_back(UsbDataStatus::ENABLED); (*currentPortStatus)[i].usbDataStatus.push_back(UsbDataStatus::ENABLED);
} }
(*currentPortStatus)[i].powerBrickStatus = PowerBrickStatus::UNKNOWN; (*currentPortStatus)[i].powerBrickStatus = PowerBrickStatus::UNKNOWN;
ALOGI("%d:%s connected:%d canChangeMode:%d canChagedata:%d canChangePower:%d " ALOGI("%d:%s connected:%d canChangeMode:%d canChagedata:%d canChangePower:%d "
"usbDataEnabled:%d", "usbDataEnabled:%d",
@@ -627,6 +629,7 @@ Status getPortStatusHelper(android::hardware::usb::Usb *usb,
done: done:
return Status::ERROR; return Status::ERROR;
} }
Status queryPowerTransferStatus(std::vector<PortStatus> *currentPortStatus) { Status queryPowerTransferStatus(std::vector<PortStatus> *currentPortStatus) {
string enabled; string enabled;

View File

@@ -43,11 +43,9 @@ using ::std::shared_ptr;
using ::std::string; using ::std::string;
constexpr char kGadgetName[] = "a600000.dwc3"; constexpr char kGadgetName[] = "a600000.dwc3";
#define ID_PATH SOC_PATH "id"
#define PULLUP_PATH "/config/usb_gadget/g1/UDC" #define PULLUP_PATH "/config/usb_gadget/g1/UDC"
#define SOC_PATH "/sys/devices/platform/soc/a600000.ssusb/" #define SOC_PATH "/sys/devices/platform/soc/a600000.ssusb/"
#define USB_DATA_PATH SOC_PATH "usb_data_enabled" #define USB_DATA_PATH SOC_PATH "usb_data_enabled"
#define VBUS_PATH SOC_PATH "b_sess"
#define USB_POWER_LIMIT_PATH "/sys/devices/platform/soc/c440000.qcom,spmi/spmi-0/spmi0-02/c440000.qcom,spmi:qcom,pm7250b@2:qcom,usb-pdphy@1700/usbpd0/" #define USB_POWER_LIMIT_PATH "/sys/devices/platform/soc/c440000.qcom,spmi/spmi-0/spmi0-02/c440000.qcom,spmi:qcom,pm7250b@2:qcom,usb-pdphy@1700/usbpd0/"
#define SINK_CURRENT_LIMIT_PATH USB_POWER_LIMIT_PATH "usb_limit_sink_current" #define SINK_CURRENT_LIMIT_PATH USB_POWER_LIMIT_PATH "usb_limit_sink_current"