diff options
author | johnwc_yeh <johnwc_yeh@compal.corp-partner.google.com> | 2022-12-06 14:44:42 +0800 |
---|---|---|
committer | Chromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com> | 2022-12-14 03:00:35 +0000 |
commit | 1aa28d52224aa2f18ab0f36a051a40f1d014929e (patch) | |
tree | e55a31d23ea96945ab61d8112b37ae4a1302ac3f | |
parent | 20e9a58e021f119f3fe26f41958de3fdad21a28d (diff) | |
download | chrome-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.c | 52 |
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, }, |