summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorScott Chao <scott_chao@wistron.corp-partner.google.com>2022-03-25 13:17:08 +0800
committerChromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com>2022-03-26 01:28:59 +0000
commit555073594254d5be23e7bb4d8ff9267a9965c2b4 (patch)
tree6a19de6a6eab3474243b967aeda080c0845e8f6d
parent652b86a6bd649896b7504041893c404fa59e3753 (diff)
downloadchrome-ec-555073594254d5be23e7bb4d8ff9267a9965c2b4.tar.gz
primus: init touchpad interface after PLT_RST#
this fixes Goodix touchpad initialization failures. BUG=b:214150759 BRANCH=none TEST=make -j BOARD=primus TEST=verified by EE Signed-off-by: Scott Chao <scott_chao@wistron.corp-partner.google.com> Change-Id: Ie74f4e39cf04ab387c03e2c7b0b2267ad335ae80 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3552396 Reviewed-by: caveh jalali <caveh@chromium.org> Commit-Queue: caveh jalali <caveh@chromium.org>
-rw-r--r--board/primus/gpio.inc6
-rw-r--r--board/primus/ps2.c25
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);