diff options
-rw-r--r-- | board/morphius/board.c | 21 | ||||
-rw-r--r-- | board/morphius/board.h | 2 | ||||
-rw-r--r-- | board/morphius/gpio.inc | 3 |
3 files changed, 25 insertions, 1 deletions
diff --git a/board/morphius/board.c b/board/morphius/board.c index ad4ea69091..536ce29b57 100644 --- a/board/morphius/board.c +++ b/board/morphius/board.c @@ -9,6 +9,7 @@ #include "driver/accelgyro_bmi160.h" #include "extpower.h" #include "gpio.h" +#include "hooks.h" #include "lid_switch.h" #include "power.h" #include "power_button.h" @@ -41,3 +42,23 @@ void board_update_sensor_config_from_sku(void) /* Enable Gyro interrupts */ gpio_enable_interrupt(GPIO_6AXIS_INT_L); } + +void board_init(void) +{ + gpio_enable_interrupt(GPIO_EN_PWR_TOUCHPAD_PS2); +} +DECLARE_HOOK(HOOK_INIT, board_init, HOOK_PRIO_INIT_I2C + 1); + +static void trackpoint_reset_deferred(void) +{ + gpio_set_level(GPIO_EC_PS2_RESET, 1); + msleep(2); + gpio_set_level(GPIO_EC_PS2_RESET, 0); +} +DECLARE_DEFERRED(trackpoint_reset_deferred); + + +void ps2_pwr_en_interrupt(enum gpio_signal signal) +{ + hook_call_deferred(&trackpoint_reset_deferred_data, MSEC); +} diff --git a/board/morphius/board.h b/board/morphius/board.h index 5df085b915..93c9e27fa2 100644 --- a/board/morphius/board.h +++ b/board/morphius/board.h @@ -56,6 +56,8 @@ #ifndef __ASSEMBLER__ +void ps2_pwr_en_interrupt(enum gpio_signal signal); + /* These GPIOs moved. Temporarily detect and support the V0 HW. */ extern enum gpio_signal GPIO_PCH_PWRBTN_L; extern enum gpio_signal GPIO_PCH_SYS_PWROK; diff --git a/board/morphius/gpio.inc b/board/morphius/gpio.inc index ce21416442..efe16543ef 100644 --- a/board/morphius/gpio.inc +++ b/board/morphius/gpio.inc @@ -25,7 +25,7 @@ GPIO_INT(EC_WP_L, PIN(5, 0), GPIO_INT_BOTH, switch_interrupt) GPIO_INT(VOLDN_BTN_ODL, PIN(A, 6), GPIO_INT_BOTH | GPIO_PULL_UP, button_interrupt) GPIO_INT(VOLUP_BTN_ODL, PIN(9, 5), GPIO_INT_BOTH | GPIO_PULL_UP, button_interrupt) GPIO_INT(6AXIS_INT_L, PIN(A, 0), GPIO_INT_FALLING | GPIO_PULL_UP, bmi160_interrupt) - +GPIO_INT(EN_PWR_TOUCHPAD_PS2, PIN(C, 2), GPIO_INT_RISING, ps2_pwr_en_interrupt) /* GPIO_INT_BOTH is required for PSL wake from hibernate, but we don't need an interrupt handler. */ GPIO(EC_RST_ODL, PIN(0, 2), GPIO_INT_BOTH | GPIO_HIB_WAKE_HIGH) @@ -50,6 +50,7 @@ GPIO(USB_C0_HPD, PIN(F, 5), GPIO_OUT_LOW) /* C0 DP Hotplug Detect */ GPIO(USB_C0_IN_HPD, PIN(7, 3), GPIO_OUT_LOW) /* C0 IN Hotplug Detect */ GPIO(DP1_HPD, PIN(F, 4), GPIO_OUT_LOW) /* C1 DP Hotplug Detect */ GPIO(DP2_HPD, PIN(C, 1), GPIO_OUT_LOW) /* C1 DP Hotplug Detect */ +GPIO(EC_PS2_RESET, PIN(3, 2), GPIO_OUT_LOW) /* Trackpoint reset pin */ GPIO(LED_FULL_L, PIN(6, 0), GPIO_OUT_HIGH) GPIO(LED_CHRG_L, PIN(C, 0), GPIO_OUT_HIGH) |