diff options
-rw-r--r-- | board/ampton/board.c | 16 | ||||
-rw-r--r-- | driver/tcpm/ps8xxx.h | 1 |
2 files changed, 17 insertions, 0 deletions
diff --git a/board/ampton/board.c b/board/ampton/board.c index d2746ca980..08cb017489 100644 --- a/board/ampton/board.c +++ b/board/ampton/board.c @@ -66,6 +66,8 @@ int ppc_get_alert_status(int port) #define USB_PD_PORT_ITE_0 0 #define USB_PD_PORT_ITE_1 1 +static int tune_mux(int port); + struct usb_mux ampton_usb_muxes[CONFIG_USB_PD_PORT_COUNT] = { [USB_PD_PORT_ITE_0] = { /* Use PS8751 as mux only */ @@ -74,6 +76,7 @@ struct usb_mux ampton_usb_muxes[CONFIG_USB_PD_PORT_COUNT] = { .flags = USB_MUX_FLAG_NOT_TCPC, .driver = &ps8xxx_usb_mux_driver, .hpd_update = &ps8xxx_tcpc_update_hpd_status, + .board_init = &tune_mux, }, [USB_PD_PORT_ITE_1] = { /* Use PS8751 as mux only */ @@ -82,9 +85,22 @@ struct usb_mux ampton_usb_muxes[CONFIG_USB_PD_PORT_COUNT] = { .flags = USB_MUX_FLAG_NOT_TCPC, .driver = &ps8xxx_usb_mux_driver, .hpd_update = &ps8xxx_tcpc_update_hpd_status, + .board_init = &tune_mux, } }; +/* Some external monitors can't display content normally (eg. ViewSonic VX2880). + * We need to turn the mux for monitors to function normally. + */ +static int tune_mux(int port) +{ + /* Auto EQ disabled, compensate for channel lost up to 3.6dB */ + mux_write(port, PS8XXX_REG_MUX_DP_EQ_CONFIGURATION, 0x98); + /* DP output swing adjustment +15% */ + mux_write(port, PS8XXX_REG_MUX_DP_OUTPUT_CONFIGURATION, 0xc0); + + return EC_SUCCESS; +} /******************************************************************************/ /* ADC channels */ const struct adc_t adc_channels[] = { diff --git a/driver/tcpm/ps8xxx.h b/driver/tcpm/ps8xxx.h index 6b94b56094..f69bb3e11a 100644 --- a/driver/tcpm/ps8xxx.h +++ b/driver/tcpm/ps8xxx.h @@ -46,6 +46,7 @@ #define IN_HPD BIT(0) #define HPD_IRQ BIT(1) #define PS8XXX_REG_MUX_DP_EQ_CONFIGURATION 0xD3 +#define PS8XXX_REG_MUX_DP_OUTPUT_CONFIGURATION 0xD4 #define PS8XXX_REG_MUX_USB_C2SS_EQ 0xE7 #define PS8XXX_REG_MUX_USB_C2SS_HS_THRESHOLD 0xE8 |