summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorScott Chao <scott_chao@wistron.corp-partner.google.com>2022-01-10 16:12:46 +0800
committerCommit Bot <commit-bot@chromium.org>2022-01-13 21:28:56 +0000
commitab207f02263624b765508a17a7fea36071770b8b (patch)
tree6896cae7491795791378e5042946e4188db030c5
parentf4de07783f55f5d09e2efa114b4a262498b555e8 (diff)
downloadchrome-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.inc6
-rw-r--r--board/primus/ps2.c18
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);
}