From 8b0aac61dd00eba673ac623fbf3b1eababdafb85 Mon Sep 17 00:00:00 2001 From: li feng Date: Thu, 13 Oct 2016 17:08:45 -0700 Subject: reef: clear hpd bit in board level tcpc init PD alternate mode is covered in tcpc interface. So tcpci_tcpm_init() doesn't reset HPD. If keeping HDMI/DP type-C cable connected, doing sysjump sets HPD signal to high while it's already high(this high comes from previous state), then OS doesn't output to HDMI/DP monitor. Reef Type-C port 1 follows TCPCI and has this issue. BUG=chrome-os-partner:57689 BRANCH=none TEST=Connect HDMI/DP type-C dongle, boot up system, OS detects HDMI/DP monitor and extends screen to it; in console doing "sysjump RO" or "sysjump RW", display goes out then comes back. Change-Id: I12239a86490f29d0123fe8bad1b813d3be28d041 Signed-off-by: li feng Reviewed-on: https://chromium-review.googlesource.com/398444 Commit-Ready: Li1 Feng Tested-by: Li1 Feng Reviewed-by: Aaron Durbin --- board/reef/board.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/board/reef/board.c b/board/reef/board.c index 22ca518c39..68d3e5f95c 100644 --- a/board/reef/board.c +++ b/board/reef/board.c @@ -303,6 +303,8 @@ void board_print_tcpc_fw_version(int port) void board_tcpc_init(void) { + int port; + /* Only reset TCPC if not sysjump */ if (!system_jumped_to_this_image()) board_reset_pd_mcu(); @@ -312,6 +314,16 @@ void board_tcpc_init(void) /* Enable TCPC1 interrupt */ gpio_enable_interrupt(GPIO_USB_C1_PD_INT_ODL); + + /* + * Initialize HPD to low; after sysjump SOC needs to see + * HPD pulse to enable video path + */ + for (port = 0; port < CONFIG_USB_PD_PORT_COUNT; port++) { + const struct usb_mux *mux = &usb_muxes[port]; + + mux->hpd_update(port, 0, 0); + } } DECLARE_HOOK(HOOK_INIT, board_tcpc_init, HOOK_PRIO_INIT_I2C+1); -- cgit v1.2.1