Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6225c89d authored by Badhri Jagan Sridharan's avatar Badhri Jagan Sridharan Committed by Automerger Merge Worker
Browse files

Implement callbacks for limitPowerTransfer am: cb01b82b am: 6c0fbf21 am: 00aeadcd

parents 486370ac 00aeadcd
Loading
Loading
Loading
Loading
+40 −2
Original line number Diff line number Diff line
@@ -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);
+5 −0
Original line number Diff line number Diff line
@@ -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();

+8 −0
Original line number Diff line number Diff line
@@ -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