summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjohnwc_yeh <johnwc_yeh@compal.corp-partner.google.com>2022-12-06 14:44:42 +0800
committerChromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com>2022-12-14 03:00:35 +0000
commit1aa28d52224aa2f18ab0f36a051a40f1d014929e (patch)
treee55a31d23ea96945ab61d8112b37ae4a1302ac3f
parent20e9a58e021f119f3fe26f41958de3fdad21a28d (diff)
downloadchrome-ec-1aa28d52224aa2f18ab0f36a051a40f1d014929e.tar.gz
Banshee: Set 'DP CONNECTION' bit
Set 'DP CONNECTION' bit when mux_state gets HPD event only on the ports with HDMI/DP card It will increase BBR power consumption, so set 'DP CONNECTION' bit only when mux_state gets HPD event only on the ports with HDMI/DP card. BUG=b:233975818 BRANCH=None TEST=make BOARD=banshee,test on Banshee, when only hdmi card 'DP CONNECTION' bit is 0. Enter console command bb 1 r 4 =0x403, plug in hdmi monitor bb 1 r 4 =0x8503. Change-Id: Ibe4f3d7fec6349d4033113f7340139dee8736aff Signed-off-by: johnwc_yeh <johnwc_yeh@compal.corp-partner.google.com> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/4082508 Reviewed-by: Elthan Huang <elthan_huang@compal.corp-partner.google.com> Reviewed-by: Boris Mittelberg <bmbm@google.com> Reviewed-by: Diana Z <dzigterman@chromium.org> Code-Coverage: Zoss <zoss-cl-coverage@prod.google.com>
-rw-r--r--board/banshee/usbc_config.c52
1 files changed, 48 insertions, 4 deletions
diff --git a/board/banshee/usbc_config.c b/board/banshee/usbc_config.c
index 86d799a58b..7f6dd15d66 100644
--- a/board/banshee/usbc_config.c
+++ b/board/banshee/usbc_config.c
@@ -112,6 +112,46 @@ BUILD_ASSERT(ARRAY_SIZE(ppc_chips) == USBC_PORT_COUNT);
unsigned int ppc_cnt = ARRAY_SIZE(ppc_chips);
+int is_framework_dp_hdmi_card(int port)
+{
+ uint16_t USB_VID = pd_get_identity_vid(port);
+ uint16_t USB_PID = pd_get_identity_pid(port);
+
+ if (((USB_PID == USB_PID_FRAMEWORK_HDMI_CARD) ||
+ (USB_PID == USB_PID_FRAMEWORK_DP_CARD)) &&
+ (USB_VID == USB_VID_FRAMEWORK))
+ return 1;
+
+ return 0;
+}
+
+void board_prefix(const struct usb_mux *me, mux_state_t hpd_state,
+ bool *ack_required)
+{
+ int port = me->usb_port;
+
+ bb_retimer_hpd_update(me, hpd_state, ack_required);
+
+ if (!is_framework_dp_hdmi_card(port))
+ return;
+
+ if (hpd_state & USB_PD_MUX_HPD_LVL)
+ bb_retimer_set_dp_connection(me, true);
+ else
+ bb_retimer_set_dp_connection(me, false);
+}
+
+int board_virtual_mux_set(const struct usb_mux *me, mux_state_t mux_state)
+{
+ int rv = 0;
+ int port = me->usb_port;
+
+ if (is_framework_dp_hdmi_card(port))
+ rv = bb_retimer_set_dp_connection(me, false);
+
+ return rv;
+}
+
/* USBC mux configuration - Alder Lake includes internal mux */
static const struct usb_mux_chain usbc0_tcss_usb_mux = {
.mux =
@@ -159,9 +199,10 @@ const struct usb_mux_chain usb_muxes[] = {
*/
.flags = USB_MUX_FLAG_CAN_IDLE,
.driver = &bb_usb_retimer,
- .hpd_update = bb_retimer_hpd_update,
+ .hpd_update = board_prefix,
.i2c_port = I2C_PORT_USB_C0_C1_MUX,
.i2c_addr_flags = USBC_PORT_C0_BB_RETIMER_I2C_ADDR,
+ .board_set = &board_virtual_mux_set,
},
.next = &usbc0_tcss_usb_mux,
},
@@ -170,9 +211,10 @@ const struct usb_mux_chain usb_muxes[] = {
.usb_port = USBC_PORT_C1,
.flags = USB_MUX_FLAG_CAN_IDLE,
.driver = &bb_usb_retimer,
- .hpd_update = bb_retimer_hpd_update,
+ .hpd_update = board_prefix,
.i2c_port = I2C_PORT_USB_C0_C1_MUX,
.i2c_addr_flags = USBC_PORT_C1_BB_RETIMER_I2C_ADDR,
+ .board_set = &board_virtual_mux_set,
},
.next = &usbc1_tcss_usb_mux,
},
@@ -181,9 +223,10 @@ const struct usb_mux_chain usb_muxes[] = {
.usb_port = USBC_PORT_C2,
.flags = USB_MUX_FLAG_CAN_IDLE,
.driver = &bb_usb_retimer,
- .hpd_update = bb_retimer_hpd_update,
+ .hpd_update = board_prefix,
.i2c_port = I2C_PORT_USB_C2_C3_MUX,
.i2c_addr_flags = USBC_PORT_C2_BB_RETIMER_I2C_ADDR,
+ .board_set = &board_virtual_mux_set,
},
.next = &usbc2_tcss_usb_mux,
},
@@ -192,9 +235,10 @@ const struct usb_mux_chain usb_muxes[] = {
.usb_port = USBC_PORT_C3,
.flags = USB_MUX_FLAG_CAN_IDLE,
.driver = &bb_usb_retimer,
- .hpd_update = bb_retimer_hpd_update,
+ .hpd_update = board_prefix,
.i2c_port = I2C_PORT_USB_C2_C3_MUX,
.i2c_addr_flags = USBC_PORT_C3_BB_RETIMER_I2C_ADDR,
+ .board_set = &board_virtual_mux_set,
},
.next = &usbc3_tcss_usb_mux,
},