diff options
author | Scott Chao <scott_chao@wistron.corp-partner.google.com> | 2022-01-10 16:12:46 +0800 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2022-01-13 21:28:56 +0000 |
commit | ab207f02263624b765508a17a7fea36071770b8b (patch) | |
tree | 6896cae7491795791378e5042946e4188db030c5 | |
parent | f4de07783f55f5d09e2efa114b4a262498b555e8 (diff) | |
download | chrome-ec-ab207f02263624b765508a17a7fea36071770b8b.tar.gz |
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 <scott_chao@wistron.corp-partner.google.com>
Change-Id: I49869d26262948f7f7242ebe494eef86e459a42c
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3376688
Reviewed-by: Boris Mittelberg <bmbm@google.com>
Reviewed-by: caveh jalali <caveh@chromium.org>
Commit-Queue: caveh jalali <caveh@chromium.org>
-rw-r--r-- | board/primus/gpio.inc | 6 | ||||
-rw-r--r-- | 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); } |