From ab207f02263624b765508a17a7fea36071770b8b Mon Sep 17 00:00:00 2001 From: Scott Chao Date: Mon, 10 Jan 2022 16:12:46 +0800 Subject: primus: fix Goodix touchpad initialize failed Goodix touchpad AVDD need to pull low to 0V when poweroff. Setting PS2 module in GPIO.inc will let AVDD have 0.9V offset. So we need to enable PS2 module later than PLTRST# to avoid the 0.9V offset. BUG=b:214150759 BRANCH=none TEST=make -j BOARD=primus TEST=verified by Goodix Signed-off-by: Scott Chao Change-Id: I49869d26262948f7f7242ebe494eef86e459a42c Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3376688 Reviewed-by: Boris Mittelberg Reviewed-by: caveh jalali Commit-Queue: caveh jalali --- board/primus/gpio.inc | 6 ++---- board/primus/ps2.c | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/board/primus/gpio.inc b/board/primus/gpio.inc index 4aa00b9ac0..ce66027514 100644 --- a/board/primus/gpio.inc +++ b/board/primus/gpio.inc @@ -78,6 +78,8 @@ GPIO(USB_C1_FRS_EN, PIN(9, 4), GPIO_OUT_LOW) GPIO(FAN_ID, PIN(4, 1), GPIO_INPUT) GPIO(USB_C0_OC_ODL, PIN(5, 6), GPIO_ODR_HIGH) GPIO(USB_C1_OC_ODL, PIN(B, 4), GPIO_ODR_HIGH) +GPIO(EC_PS2_SCL_TPAD, PIN(6, 2), GPIO_ODR_LOW) +GPIO(EC_PS2_SDA_TPAD, PIN(6, 3), GPIO_ODR_LOW) /* UART alternate functions */ ALTERNATE(PIN_MASK(6, 0x30), 0, MODULE_UART, 0) /* GPIO64/CR_SIN1, GPO65/CR_SOUT1/FLPRG1_L */ @@ -116,10 +118,6 @@ ALTERNATE(PIN_MASK(0, 0x01), 0, MODULE_PMU, GPIO_INT_BOTH | GPIO_HIB_WAKE_HIGH) ALTERNATE(PIN_MASK(0, 0x02), 0, MODULE_PMU, GPIO_INT_BOTH | GPIO_HIB_WAKE_LOW) /* GPIO01/PSL_IN3_L&GPI01 */ ALTERNATE(PIN_MASK(D, 0x04), 0, MODULE_PMU, GPIO_INT_BOTH | GPIO_HIB_WAKE_HIGH) /* PSL_IN1_L&GPID2/GPIOD2 */ -/* PS2 function */ -/* PS/2 channel 1 for aux device */ -ALTERNATE(PIN_MASK(6, 0x0C), 0, MODULE_PS2, 0) /* PS2_CLK1/GPIO62, PS2_DAT1/GPIO63 */ - /* Unused Pins */ UNUSED(PIN(D, 6)) /* GPOD6/CR_SOUT3/SHDF_ESPI_L */ UNUSED(PIN(8, 1)) /* GPIO81/PECI_DATA */ diff --git a/board/primus/ps2.c b/board/primus/ps2.c index 2a605b37e5..5ccc457b8e 100644 --- a/board/primus/ps2.c +++ b/board/primus/ps2.c @@ -4,11 +4,29 @@ */ #include "hooks.h" +#include "i8042_protocol.h" #include "keyboard_8042.h" #include "ps2_chip.h" void send_aux_data_to_device(uint8_t data) { + if (data == I8042_CMD_RESET_DIS) { + /* + * EC will receive I8042_CMD_RESET_DIS when warm reboot, + * set GPIO62/ GPIO63 back to GPIO and pull low. + */ + gpio_set_flags(GPIO_EC_PS2_SCL_TPAD, GPIO_ODR_LOW); + gpio_set_flags(GPIO_EC_PS2_SDA_TPAD, GPIO_ODR_LOW); + gpio_set_alternate_function(GPIO_PORT_6, + BIT(2) | BIT(3), GPIO_ALT_FUNC_NONE); + } else if (data == I8042_CMD_GETID) { + /* + * In normal boot, when we get I8042_CMD_GETID command, + * enable the PS2 module. + */ + gpio_set_alternate_function(GPIO_PORT_6, + BIT(2) | BIT(3), GPIO_ALT_FUNC_DEFAULT); + } ps2_transmit_byte(NPCX_PS2_CH1, data); } -- cgit v1.2.1