Tim Wawrzynczak submitted this change.

View Change

Approvals: build bot (Jenkins): Verified Furquan Shaikh: Looks good to me, approved
ec/google/chromeec: Add new API for USB-C mux handling

Add google_chromeec_get_usbc_mux_info() to obtain USB-C mux
related information.

BUG=b:192947843

Signed-off-by: Derek Huang <derek.huang@intel.corp-partner.google.com>
Change-Id: Idc27f23214c2d5b91334ae3efe248100329964ba
Reviewed-on: https://review.coreboot.org/c/coreboot/+/58059
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Furquan Shaikh <furquan@google.com>
---
M src/ec/google/chromeec/ec.c
M src/ec/google/chromeec/ec.h
2 files changed, 44 insertions(+), 0 deletions(-)

diff --git a/src/ec/google/chromeec/ec.c b/src/ec/google/chromeec/ec.c
index 5a8e4f6..e27ad9e 100644
--- a/src/ec/google/chromeec/ec.c
+++ b/src/ec/google/chromeec/ec.c
@@ -1565,6 +1565,42 @@
return 0;
}

+/*
+ * Obtain any USB-C mux data needed for the specified port
+ * in: physical port number of the type-c port
+ * out: struct usbc_mux_info mux_info stores USB-C mux data
+ * Return: 0 on success, -1 on error
+*/
+int google_chromeec_get_usbc_mux_info(int port, struct usbc_mux_info *mux_info)
+{
+ uint8_t mux_flags;
+ uint8_t dp_pin_mode;
+ bool ufp, dbg_acc, active_cable;
+
+ if (google_chromeec_usb_get_pd_mux_info(port, &mux_flags) < 0) {
+ printk(BIOS_ERR, "Port C%d: get_pd_mux_info failed\n", port);
+ return -1;
+ }
+
+ if (google_chromeec_usb_pd_get_info(port, &ufp, &dbg_acc,
+ &active_cable, &dp_pin_mode) < 0) {
+ printk(BIOS_ERR, "Port C%d: pd_control failed\n", port);
+ return -1;
+ }
+
+ mux_info->usb = !!(mux_flags & USB_PD_MUX_USB_ENABLED);
+ mux_info->dp = !!(mux_flags & USB_PD_MUX_DP_ENABLED);
+ mux_info->polarity = !!(mux_flags & USB_PD_MUX_POLARITY_INVERTED);
+ mux_info->hpd_irq = !!(mux_flags & USB_PD_MUX_HPD_IRQ);
+ mux_info->hpd_lvl = !!(mux_flags & USB_PD_MUX_HPD_LVL);
+ mux_info->ufp = !!ufp;
+ mux_info->dbg_acc = !!dbg_acc;
+ mux_info->cable = !!active_cable;
+ mux_info->dp_pin_mode = dp_pin_mode;
+
+ return 0;
+}
+
/**
* Check if EC/TCPM is in an alternate mode or not.
*
diff --git a/src/ec/google/chromeec/ec.h b/src/ec/google/chromeec/ec.h
index a06dfa1..f4090fe 100644
--- a/src/ec/google/chromeec/ec.h
+++ b/src/ec/google/chromeec/ec.h
@@ -9,6 +9,7 @@
#include <types.h>
#include <device/device.h>
#include "ec_commands.h"
+#include <device/usbc_mux.h>

/* Fill in base and size of the IO port resources used. */
void google_chromeec_ioport_range(uint16_t *base, size_t *size);
@@ -48,6 +49,13 @@
* specified port.
* Return: 0 on success, -1 on error */
int google_chromeec_typec_control_enter_dp_mode(int port);
+/*
+ * Obtain any USB-C mux data needed for the specified port
+ * in: int port physical port number of the type-c port
+ * out: struct usbc_mux_info mux_info stores USB-C mux data
+ * Return: 0 on success, -1 on error
+ */
+int google_chromeec_get_usbc_mux_info(int port, struct usbc_mux_info *mux_info);

/* Device events */
uint64_t google_chromeec_get_device_enabled_events(void);

2 is the latest approved patch-set. No files were changed between the latest approved patch-set and the submitted one.

To view, visit change 58059. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-Change-Id: Idc27f23214c2d5b91334ae3efe248100329964ba
Gerrit-Change-Number: 58059
Gerrit-PatchSet: 5
Gerrit-Owner: Derek Huang <derek.huang@intel.corp-partner.google.com>
Gerrit-Reviewer: Furquan Shaikh <furquan@google.com>
Gerrit-Reviewer: Tim Wawrzynczak <twawrzynczak@chromium.org>
Gerrit-Reviewer: build bot (Jenkins) <no-reply@coreboot.org>
Gerrit-MessageType: merged