From 6131cedc7160d6f71245992fa5e7bf1f7acb70c4 Mon Sep 17 00:00:00 2001 From: Daisuke Nojiri Date: Mon, 15 Apr 2019 17:58:41 -0700 Subject: Nami: Set TCPC_AUX_SWITCH to 0xC on Port 1 on CCD enable When the screen brightness is changed, DP sends signal on AUX channel. This causes CCD mode to be disconnected. This patch sets the MUX to aux+ <-> sbu2, aux- <-> sbu1 to fix it. Signed-off-by: Daisuke Nojiri BUG=b/113266817 BRANCH=nami TEST=Verify on Syndra UART over CCD doesn't get disconnected when the screen brightness is changed. Change-Id: I3dba1bdfd44a921077a2f60dec17119bb0077238 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1595212 Reviewed-by: Daisuke Nojiri Commit-Queue: Daisuke Nojiri Tested-by: Daisuke Nojiri Auto-Submit: Daisuke Nojiri --- board/nami/board.c | 24 ++++++++++++++++++++++++ board/nami/board.h | 2 ++ board/nami/gpio.inc | 2 +- 3 files changed, 27 insertions(+), 1 deletion(-) (limited to 'board/nami') diff --git a/board/nami/board.c b/board/nami/board.c index e854c4990a..2526cab319 100644 --- a/board/nami/board.c +++ b/board/nami/board.c @@ -982,6 +982,26 @@ struct keyboard_scan_config keyscan_config = { }, }; +static void anx7447_set_aux_switch(void) +{ + const int port = USB_PD_PORT_ANX7447; + + /* Debounce */ + if (gpio_get_level(GPIO_CCD_MODE_ODL)) + return; + + CPRINTS("C%d: AUX_SW_SEL=0x%x", port, 0xc); + if (tcpc_write(port, ANX7447_REG_TCPC_AUX_SWITCH, 0xc)) + CPRINTS("C%d: Setting AUX_SW_SEL failed", port); +} +DECLARE_DEFERRED(anx7447_set_aux_switch); + +void ccd_mode_isr(enum gpio_signal signal) +{ + /* Wait 2 seconds until all mux setting is done by PD task */ + hook_call_deferred(&anx7447_set_aux_switch_data, 2 * SECOND); +} + static void board_init(void) { int reg; @@ -1014,6 +1034,10 @@ static void board_init(void) gpio_enable_interrupt(GPIO_USB_C0_BC12_INT_L); gpio_enable_interrupt(GPIO_USB_C1_BC12_INT_L); + /* Trigger once to set mux in case CCD cable is already connected. */ + ccd_mode_isr(GPIO_CCD_MODE_ODL); + gpio_enable_interrupt(GPIO_CCD_MODE_ODL); + /* Enable Accel/Gyro interrupt for convertibles. */ if (sku & SKU_ID_MASK_CONVERTIBLE) gpio_enable_interrupt(GPIO_ACCELGYRO3_INT_L); diff --git a/board/nami/board.h b/board/nami/board.h index 300fa495f4..04cf4768a8 100644 --- a/board/nami/board.h +++ b/board/nami/board.h @@ -330,6 +330,8 @@ extern uint8_t model; /* SKU_ID[24:31] are dedicated to OEM customization */ #define CBI_SKU_CUSTOM_FIELD(val) ((val) >> 24) +void ccd_mode_isr(enum gpio_signal signal); + #endif /* !__ASSEMBLER__ */ #endif /* __CROS_EC_BOARD_H */ diff --git a/board/nami/gpio.inc b/board/nami/gpio.inc index 7bc922edaa..f4119c96a6 100644 --- a/board/nami/gpio.inc +++ b/board/nami/gpio.inc @@ -35,6 +35,7 @@ GPIO_INT(USB_C0_BC12_INT_L, PIN(D, 2), GPIO_INT_FALLING, usb0_evt) GPIO_INT(USB_C1_BC12_INT_L, PIN(D, 3), GPIO_INT_FALLING, usb1_evt) GPIO_INT(ACCELGYRO3_INT_L, PIN(3, 6), GPIO_INT_FALLING | GPIO_PULL_UP, bmi160_interrupt) GPIO_INT(TABLET_MODE_L, PIN(7, 2), GPIO_INT_BOTH, gmr_tablet_switch_isr) +GPIO_INT(CCD_MODE_ODL, PIN(6, 3), GPIO_INT_FALLING, ccd_mode_isr) GPIO(ENABLE_BACKLIGHT_L, PIN(6, 7), GPIO_OUT_LOW) /* LCD backlight */ GPIO(PP3300_DX_WLAN, PIN(B, 1), GPIO_OUT_LOW) /* Enable WLAN 3.3V Power */ @@ -47,7 +48,6 @@ GPIO(EC_PLATFORM_RST, PIN(4, 5), GPIO_OUT_LOW) /* EC Reset to LDO_EN */ GPIO(SYS_RESET_L, PIN(6, 1), GPIO_ODR_HIGH) /* Cold Reset to SOC */ GPIO(PMIC_SLP_SUS_L, PIN(8, 5), GPIO_OUT_LOW) /* SLP_SUS# to PMIC */ GPIO(BATTERY_PRESENT_L, PIN(3, 4), GPIO_INPUT) /* Battery Present */ -GPIO(CCD_MODE_ODL, PIN(6, 3), GPIO_INPUT) /* Case Closed Debug Mode */ GPIO(ENTERING_RW, PIN(7, 6), GPIO_OUTPUT) /* EC Entering RW */ GPIO(PMIC_INT_L, PIN(6, 0), GPIO_INPUT) /* PMIC interrupt */ #ifndef CONFIG_POWER_S0IX -- cgit v1.2.1