diff options
author | Badhri Jagan Sridharan <badhri@google.com> | 2022-05-12 17:05:04 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2022-05-12 17:05:04 +0000 |
commit | e39640b8d10c35b592808ca1200486b952f643a0 (patch) | |
tree | 335bf998b53b9c833febe7da65d1de600317bf31 | |
parent | 8385e15c140bbd81e5af31b3a1232189de0d2bec (diff) | |
parent | cb01b82b5a1bd278375dcf8f32593ad342985db2 (diff) | |
download | redfin-e39640b8d10c35b592808ca1200486b952f643a0.tar.gz |
Implement callbacks for limitPowerTransfer am: cb01b82b5a
Original change: https://googleplex-android-review.googlesource.com/c/device/google/redfin/+/18245990
Change-Id: I1e4180c0b5ad2f85113ba276d3a2d07fdfbed23f
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r-- | usb/usb/Usb.cpp | 42 | ||||
-rw-r--r-- | usb/usb/Usb.h | 5 | ||||
-rw-r--r-- | usb/usb/android.hardware.usb-service.rc | 8 |
3 files changed, 53 insertions, 2 deletions
diff --git a/usb/usb/Usb.cpp b/usb/usb/Usb.cpp index 8d4cb47..348d28e 100644 --- a/usb/usb/Usb.cpp +++ b/usb/usb/Usb.cpp @@ -164,12 +164,35 @@ ScopedAStatus Usb::resetUsbPort(const std::string& in_portName, int64_t in_trans ScopedAStatus Usb::limitPowerTransfer(const string& in_portName, bool in_limit, int64_t in_transactionId) { std::vector<PortStatus> currentPortStatus; + bool sessionFail = false, success; - ALOGI("limitPowerTransfer limit:%c opId:%ld", in_limit ? 'y' : 'n', in_transactionId); pthread_mutex_lock(&mLock); + ALOGI("limitPowerTransfer limit:%c opId:%ld", in_limit ? 'y' : 'n', in_transactionId); + + if (in_limit) { + success = WriteStringToFile("0", SINK_CURRENT_LIMIT_PATH); + if (!success) { + ALOGE("Failed to set sink current limit"); + sessionFail = true; + } + } + success = WriteStringToFile(in_limit ? "1" : "0", SINK_LIMIT_ENABLE_PATH); + if (!success) { + ALOGE("Failed to %s sink current limit: %s", in_limit ? "enable" : "disable", + SINK_LIMIT_ENABLE_PATH); + sessionFail = true; + } + success = WriteStringToFile(in_limit ? "1" : "0", SOURCE_LIMIT_ENABLE_PATH); + if (!success) { + ALOGE("Failed to %s source current limit: %s", in_limit ? "enable" : "disable", + SOURCE_LIMIT_ENABLE_PATH); + sessionFail = true; + } + if (mCallback != NULL && in_transactionId >= 0) { ScopedAStatus ret = mCallback->notifyLimitPowerTransferStatus( - in_portName, in_limit, Status::NOT_SUPPORTED, in_transactionId); + in_portName, in_limit, sessionFail ? Status::ERROR : Status::SUCCESS, + in_transactionId); if (!ret.isOk()) ALOGE("limitPowerTransfer error %s", ret.getDescription().c_str()); } else { @@ -604,6 +627,20 @@ Status getPortStatusHelper(android::hardware::usb::Usb *usb, done: return Status::ERROR; } +Status queryPowerTransferStatus(std::vector<PortStatus> *currentPortStatus) { + string enabled; + + if (!ReadFileToString(SINK_LIMIT_ENABLE_PATH, &enabled)) { + ALOGE("Failed to open limit_sink_enable"); + return Status::ERROR; + } + + enabled = Trim(enabled); + (*currentPortStatus)[0].powerTransferLimited = enabled == "1"; + + ALOGI("powerTransferLimited:%d", (*currentPortStatus)[0].powerTransferLimited ? 1 : 0); + return Status::SUCCESS; +} void queryVersionHelper(android::hardware::usb::Usb *usb, std::vector<PortStatus> *currentPortStatus) { @@ -611,6 +648,7 @@ void queryVersionHelper(android::hardware::usb::Usb *usb, pthread_mutex_lock(&usb->mLock); status = getPortStatusHelper(usb, currentPortStatus); queryMoistureDetectionStatus(currentPortStatus); + queryPowerTransferStatus(currentPortStatus); if (usb->mCallback != NULL) { ScopedAStatus ret = usb->mCallback->notifyPortStatusChange(*currentPortStatus, status); diff --git a/usb/usb/Usb.h b/usb/usb/Usb.h index 0cd9699..94fbecb 100644 --- a/usb/usb/Usb.h +++ b/usb/usb/Usb.h @@ -49,6 +49,11 @@ constexpr char kGadgetName[] = "a600000.dwc3"; #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 SINK_CURRENT_LIMIT_PATH USB_POWER_LIMIT_PATH "usb_limit_sink_current" +#define SINK_LIMIT_ENABLE_PATH USB_POWER_LIMIT_PATH "usb_limit_sink_enable" +#define SOURCE_LIMIT_ENABLE_PATH USB_POWER_LIMIT_PATH "usb_limit_source_enable" + struct Usb : public BnUsb { Usb(); diff --git a/usb/usb/android.hardware.usb-service.rc b/usb/usb/android.hardware.usb-service.rc index ec21fce..2801dd4 100644 --- a/usb/usb/android.hardware.usb-service.rc +++ b/usb/usb/android.hardware.usb-service.rc @@ -2,3 +2,11 @@ service vendor.usb /vendor/bin/hw/android.hardware.usb-service.redfin class hal user system group system shell + +on boot + chown root system /sys/devices/platform/soc/c440000.qcom,spmi/spmi-0/spmi0-02/c440000.qcom,spmi:qcom,pm7250b@2:qcom,usb-pdphy@1700/usbpd0/usb_limit_sink_enable + chown root system /sys/devices/platform/soc/c440000.qcom,spmi/spmi-0/spmi0-02/c440000.qcom,spmi:qcom,pm7250b@2:qcom,usb-pdphy@1700/usbpd0/usb_limit_source_enable + chown root system /sys/devices/platform/soc/c440000.qcom,spmi/spmi-0/spmi0-02/c440000.qcom,spmi:qcom,pm7250b@2:qcom,usb-pdphy@1700/usbpd0/usb_limit_sink_current + chmod 664 /sys/devices/platform/soc/c440000.qcom,spmi/spmi-0/spmi0-02/c440000.qcom,spmi:qcom,pm7250b@2:qcom,usb-pdphy@1700/usbpd0/usb_limit_sink_enable + chmod 664 /sys/devices/platform/soc/c440000.qcom,spmi/spmi-0/spmi0-02/c440000.qcom,spmi:qcom,pm7250b@2:qcom,usb-pdphy@1700/usbpd0/usb_limit_source_enable + chmod 664 /sys/devices/platform/soc/c440000.qcom,spmi/spmi-0/spmi0-02/c440000.qcom,spmi:qcom,pm7250b@2:qcom,usb-pdphy@1700/usbpd0/usb_limit_sink_current |