usb: enable/disable displayport alt mode through enableUsbData

Adds functionality for enabling and disabling DisplayPort Alt Mode
on the port through enableUsbData in the USB HAL to comply with USB
restrictions for heightened security mode.

Test: manual test on device - use enableUsbData dumpsys command to
      turn off DisplayPort and then turn it back on while connected to a
      partner sink.
Bug: 297208252
Change-Id: I9f071bce802b728f2229abc08efb2204e4c2505a
Signed-off-by: RD Babiera <rdbabiera@google.com>
This commit is contained in:
RD Babiera 2023-09-19 19:14:39 +00:00
parent 4d92d85daa
commit 7fbcdf0237
4 changed files with 50 additions and 0 deletions

View file

@ -229,3 +229,6 @@
# Wlan
/dev/wlan 0660 wifi wifi
# USB Alt Modes
/sys/devices/platform/108d0000.hsi2c/i2c-*/*-0025/typec/port0/port0-partner/port0-partner.* mode1/active 0664 system system

View file

@ -95,6 +95,7 @@ ScopedAStatus Usb::enableUsbData(const string& in_portName, bool in_enable,
int64_t in_transactionId) {
bool result = true;
std::vector<PortStatus> currentPortStatus;
string displayPortPartnerPath;
ALOGI("Userspace turn %s USB data signaling. opID:%ld", in_enable ? "on" : "off",
in_transactionId);
@ -110,6 +111,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)) {
@ -131,6 +153,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) {

View file

@ -59,6 +59,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"

View file

@ -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/108d0000.hsi2c/i2c-0/0-0025/contaminant_detection
chown root system /sys/devices/platform/108d0000.hsi2c/i2c-1/1-0025/contaminant_detection
chown root system /sys/devices/platform/108d0000.hsi2c/i2c-2/2-0025/contaminant_detection
@ -80,6 +81,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