diff options
Diffstat (limited to 'board')
-rw-r--r-- | board/primus/gpio.inc | 6 | ||||
-rw-r--r-- | board/primus/ps2.c | 25 |
2 files changed, 27 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 7acedefc22..d91527c508 100644 --- a/board/primus/ps2.c +++ b/board/primus/ps2.c @@ -7,6 +7,7 @@ #include "hooks.h" #include "keyboard_8042.h" #include "ps2_chip.h" +#include "time.h" void send_aux_data_to_device(uint8_t data) { @@ -18,3 +19,27 @@ static void board_init(void) ps2_enable_channel(NPCX_PS2_CH1, 1, send_aux_data_to_host_interrupt); } DECLARE_HOOK(HOOK_INIT, board_init, HOOK_PRIO_DEFAULT); + +/* + * 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. + */ +static void enable_ps2(void) +{ + gpio_set_alternate_function(GPIO_PORT_6, + BIT(2) | BIT(3), GPIO_ALT_FUNC_DEFAULT); +} +DECLARE_DEFERRED(enable_ps2); + +static void disable_ps2(void) +{ + 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); + /* make sure PLTRST# goes high and re-enable ps2.*/ + hook_call_deferred(&enable_ps2_data, 2 * SECOND); +} +DECLARE_HOOK(HOOK_CHIPSET_RESET, disable_ps2, HOOK_PRIO_DEFAULT); |