diff --git a/conf/ueventd.zuma.rc b/conf/ueventd.zuma.rc index 9f4d2b31..dc2c2d4f 100644 --- a/conf/ueventd.zuma.rc +++ b/conf/ueventd.zuma.rc @@ -239,3 +239,6 @@ /sys/bus/aoc/devices/control udfps_set_clock_source 0220 system system /sys/bus/aoc/devices/control udfps_get_osc_freq 0440 system system /sys/bus/aoc/devices/control udfps_get_disp_freq 0440 system system + +# USB Alt Modes +/sys/devices/platform/10cb0000.hsi2c/i2c-*/*-0025/typec/port0/port0-partner/port0-partner.* mode1/active 0664 system system \ No newline at end of file diff --git a/usb/usb/Usb.cpp b/usb/usb/Usb.cpp index c2bf403e..b755e03c 100644 --- a/usb/usb/Usb.cpp +++ b/usb/usb/Usb.cpp @@ -111,6 +111,7 @@ ScopedAStatus Usb::enableUsbData(const string& in_portName, bool in_enable, int64_t in_transactionId) { bool result = true; std::vector currentPortStatus; + string displayPortPartnerPath; ALOGI("Userspace turn %s USB data signaling. opID:%ld", in_enable ? "on" : "off", in_transactionId); @@ -126,6 +127,27 @@ ScopedAStatus Usb::enableUsbData(const string& in_portName, bool in_enable, ALOGE("Gadget cannot be pulled up"); result = false; } + + if (!WriteStringToFile("1", DISPLAYPORT_ACTIVE_PATH)) { + ALOGE("Failed to enable DisplayPort Alt Mode on port"); + } else { + ALOGI("Successfully enabled DisplayPort Alt Mode on port"); + } + + if (getDisplayPortUsbPathHelper(&displayPortPartnerPath) == Status::SUCCESS) { + size_t pos = displayPortPartnerPath.find("/displayport"); + if (pos != string::npos) { + displayPortPartnerPath = displayPortPartnerPath.substr(0, pos) + "/mode1/active"; + } + if (!WriteStringToFile("1", displayPortPartnerPath)) { + ALOGE("Failed to enable DisplayPort Alt Mode on partner at %s", + displayPortPartnerPath.c_str()); + } else { + ALOGI("Successfully enabled DisplayPort Alt Mode on partner at %s", + displayPortPartnerPath.c_str()); + setupDisplayPortPoll(); + } + } } } else { if (!WriteStringToFile("1", ID_PATH)) { @@ -147,6 +169,27 @@ ScopedAStatus Usb::enableUsbData(const string& in_portName, bool in_enable, ALOGE("Gadget cannot be pulled down"); result = false; } + + if (getDisplayPortUsbPathHelper(&displayPortPartnerPath) == Status::SUCCESS) { + size_t pos = displayPortPartnerPath.find("/displayport"); + if (pos != string::npos) { + displayPortPartnerPath = displayPortPartnerPath.substr(0, pos) + "/mode1/active"; + } + if (!WriteStringToFile("0", displayPortPartnerPath)) { + ALOGE("Failed to disable DisplayPort Alt Mode on partner at %s", + displayPortPartnerPath.c_str()); + } else { + ALOGI("Successfully disabled DisplayPort Alt Mode on partner at %s", + displayPortPartnerPath.c_str()); + shutdownDisplayPortPoll(true); + } + } + + if (!WriteStringToFile("0", DISPLAYPORT_ACTIVE_PATH)) { + ALOGE("Failed to disable DisplayPort Alt Mode on port"); + } else { + ALOGI("Successfully disabled DisplayPort Alt Mode on port"); + } } if (result) { diff --git a/usb/usb/Usb.h b/usb/usb/Usb.h index 4bbb2a3a..0b72d6ba 100644 --- a/usb/usb/Usb.h +++ b/usb/usb/Usb.h @@ -60,6 +60,8 @@ constexpr char kGadgetName[] = "11210000.dwc3"; #define VBUS_PATH NEW_UDC_PATH "dwc3_exynos_otg_b_sess" #define USB_DATA_PATH NEW_UDC_PATH "usb_data_enabled" +#define DISPLAYPORT_ACTIVE_PATH "/sys/class/typec/port0/port0.0/mode1/active" + #define LINK_TRAINING_STATUS_UNKNOWN "0" #define LINK_TRAINING_STATUS_SUCCESS "1" #define LINK_TRAINING_STATUS_FAILURE "2" diff --git a/usb/usb/android.hardware.usb-service.rc b/usb/usb/android.hardware.usb-service.rc index 072c85b8..4fe8d1b6 100644 --- a/usb/usb/android.hardware.usb-service.rc +++ b/usb/usb/android.hardware.usb-service.rc @@ -8,6 +8,7 @@ on post-fs chown root system /sys/class/typec/port0/power_role chown root system /sys/class/typec/port0/data_role chown root system /sys/class/typec/port0/port_type + chown root system /sys/class/typec/port0/port0.0/mode1/active chown root system /sys/devices/platform/10cb0000.hsi2c/i2c-0/0-0025/contaminant_detection chown root system /sys/devices/platform/10cb0000.hsi2c/i2c-1/1-0025/contaminant_detection chown root system /sys/devices/platform/10cb0000.hsi2c/i2c-2/2-0025/contaminant_detection @@ -90,6 +91,7 @@ on post-fs chmod 664 /sys/class/typec/port0/power_role chmod 664 /sys/class/typec/port0/data_role chmod 664 /sys/class/typec/port0/port_type + chmod 664 /sys/class/typec/port0/port0.0/mode1/active chmod 664 /sys/devices/platform/11110000.usb/dwc3_exynos_otg_b_sess chmod 664 /sys/devices/platform/11110000.usb/dwc3_exynos_otg_id chmod 664 /sys/devices/platform/11110000.usb/usb_data_enabled