Implement callbacks for limitPowerTransfer am: cb01b82b5a

Original change: https://googleplex-android-review.googlesource.com/c/device/google/redfin/+/18245990

Change-Id: I3e3e3f1f7e085733e52727990c69db089dd29634
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Badhri Jagan Sridharan
2022-05-13 20:02:12 +00:00
committed by Automerger Merge Worker
3 changed files with 53 additions and 2 deletions

View File

@@ -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, ScopedAStatus Usb::limitPowerTransfer(const string& in_portName, bool in_limit,
int64_t in_transactionId) { int64_t in_transactionId) {
std::vector<PortStatus> currentPortStatus; std::vector<PortStatus> currentPortStatus;
bool sessionFail = false, success;
ALOGI("limitPowerTransfer limit:%c opId:%ld", in_limit ? 'y' : 'n', in_transactionId);
pthread_mutex_lock(&mLock); 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) { if (mCallback != NULL && in_transactionId >= 0) {
ScopedAStatus ret = mCallback->notifyLimitPowerTransferStatus( 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()) if (!ret.isOk())
ALOGE("limitPowerTransfer error %s", ret.getDescription().c_str()); ALOGE("limitPowerTransfer error %s", ret.getDescription().c_str());
} else { } else {
@@ -604,6 +627,20 @@ Status getPortStatusHelper(android::hardware::usb::Usb *usb,
done: done:
return Status::ERROR; 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, void queryVersionHelper(android::hardware::usb::Usb *usb,
std::vector<PortStatus> *currentPortStatus) { std::vector<PortStatus> *currentPortStatus) {
@@ -611,6 +648,7 @@ void queryVersionHelper(android::hardware::usb::Usb *usb,
pthread_mutex_lock(&usb->mLock); pthread_mutex_lock(&usb->mLock);
status = getPortStatusHelper(usb, currentPortStatus); status = getPortStatusHelper(usb, currentPortStatus);
queryMoistureDetectionStatus(currentPortStatus); queryMoistureDetectionStatus(currentPortStatus);
queryPowerTransferStatus(currentPortStatus);
if (usb->mCallback != NULL) { if (usb->mCallback != NULL) {
ScopedAStatus ret = usb->mCallback->notifyPortStatusChange(*currentPortStatus, ScopedAStatus ret = usb->mCallback->notifyPortStatusChange(*currentPortStatus,
status); status);

View File

@@ -49,6 +49,11 @@ constexpr char kGadgetName[] = "a600000.dwc3";
#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 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 { struct Usb : public BnUsb {
Usb(); Usb();

View File

@@ -2,3 +2,11 @@ service vendor.usb /vendor/bin/hw/android.hardware.usb-service.redfin
class hal class hal
user system user system
group system shell 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