diff options
author | Sue Chen <sue.chen@quanta.corp-partner.google.com> | 2021-12-21 17:44:53 +0800 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2022-01-07 02:39:27 +0000 |
commit | 99fc065cda4cd4b165efdd52cee5b664ec6e3578 (patch) | |
tree | 5cf01c2f5ff0799b05cef648d27c4f5b21c7b032 | |
parent | 86d03603628e3fed9728a86f9acf06e9de435a5e (diff) | |
download | chrome-ec-99fc065cda4cd4b165efdd52cee5b664ec6e3578.tar.gz |
Quackingstick: Detect pen input and charge it
Use PEN_DETECT to detect if the pen input and
pull PEN_PWR_EN to charge/discharge the pen.
BUG=b:205163599
BRANCH=trogdor
TEST="make BOARD=quackingstick" pass
Signed-off-by: Sue Chen <sue.chen@quanta.corp-partner.google.com>
Change-Id: I5a3392c8f88ad372fc8e043fb24eb5cac3adaa86
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3351428
Reviewed-by: Bob Moragues <moragues@chromium.org>
Reviewed-by: Jack Rosenthal <jrosenth@chromium.org>
-rw-r--r-- | board/quackingstick/board.c | 31 | ||||
-rw-r--r-- | board/quackingstick/board.h | 1 | ||||
-rw-r--r-- | board/quackingstick/gpio.inc | 4 |
3 files changed, 34 insertions, 2 deletions
diff --git a/board/quackingstick/board.c b/board/quackingstick/board.c index 856578db82..d0552b9f05 100644 --- a/board/quackingstick/board.c +++ b/board/quackingstick/board.c @@ -412,6 +412,10 @@ static void board_init(void) */ gpio_enable_interrupt(GPIO_CCD_MODE_ODL); + /* Enable pen input detect interrupt */ + if (system_get_board_version() >= 2) + gpio_enable_interrupt(GPIO_EC_PEN_PDCT_L); + /* Set the backlight duty cycle to 0. AP will override it later. */ pwm_set_duty(PWM_CH_DISPLIGHT, 0); } @@ -626,6 +630,33 @@ void board_set_charge_limit(int port, int supplier, int charge_ma, charge_mv); } +/** + * Handle debounced pen input changing state. + */ +static void pen_input_deferred(void) +{ + bool pen_charge_enable = !gpio_get_level(GPIO_EC_PEN_PDCT_L) && + !chipset_in_state(CHIPSET_STATE_ANY_OFF); + + gpio_set_level(GPIO_PEN_PWR_EN, pen_charge_enable); + + CPRINTS("Pen charge %sable", pen_charge_enable ? "en" : "dis"); +} +DECLARE_DEFERRED(pen_input_deferred); + +void pen_input_interrupt(enum gpio_signal signal) +{ + /* pen input debounce time */ + hook_call_deferred(&pen_input_deferred_data, (100 * MSEC)); +} + +static void pen_charge_check(void) +{ + hook_call_deferred(&pen_input_deferred_data, (100 * MSEC)); +} +DECLARE_HOOK(HOOK_CHIPSET_STARTUP, pen_charge_check, HOOK_PRIO_LAST); +DECLARE_HOOK(HOOK_CHIPSET_SHUTDOWN, pen_charge_check, HOOK_PRIO_LAST); + uint16_t tcpc_get_alert_status(void) { uint16_t status = 0; diff --git a/board/quackingstick/board.h b/board/quackingstick/board.h index 7ad8cd227c..0d412246ec 100644 --- a/board/quackingstick/board.h +++ b/board/quackingstick/board.h @@ -116,6 +116,7 @@ void board_set_tcpc_power_mode(int port, int mode); void base_detect_interrupt(enum gpio_signal signal); /* motion sensor interrupt */ void motion_interrupt(enum gpio_signal signal); +void pen_input_interrupt(enum gpio_signal signal); #endif /* !defined(__ASSEMBLER__) */ diff --git a/board/quackingstick/gpio.inc b/board/quackingstick/gpio.inc index 09983989d2..c126b59977 100644 --- a/board/quackingstick/gpio.inc +++ b/board/quackingstick/gpio.inc @@ -39,6 +39,7 @@ GPIO_INT(BASE_DET_L, PIN(3, 7), GPIO_INT_BOTH, base_detect_interrupt) /* /* Sensor interrupts */ GPIO_INT(ACCEL_GYRO_INT_L, PIN(A, 0), GPIO_INT_FALLING, motion_interrupt) /* Accelerometer/gyro interrupt */ +GPIO_INT(EC_PEN_PDCT_L, PIN(5, 0), GPIO_INT_BOTH, pen_input_interrupt) /* Pen input detect */ /* * EC_RST_ODL acts as a wake source from hibernate mode. However, it does not @@ -62,6 +63,7 @@ GPIO(EC_BL_DISABLE_L, PIN(B, 6), GPIO_OUT_LOW) /* Backlight disable sign /* Base detection */ GPIO(EN_BASE, PIN(0, 4), GPIO_OUT_LOW) /* Enable power to detachable base */ +GPIO(PEN_PWR_EN, PIN(8, 2), GPIO_OUT_LOW) /* Pen input charge */ /* USB-C */ GPIO(USB_C0_PD_RST_L, PIN(F, 1), GPIO_ODR_HIGH) /* Port-0 TCPC chip reset, actaully Open-Drain */ @@ -122,12 +124,10 @@ GPIO(ARM_X86, PIN(6, 6), GPIO_OUT_LOW) /* NC, low for power savin /* Unused GPIOs, NC. Apply PU for power saving */ UNUSED(PIN(F, 5)) UNUSED(PIN(4, 0)) -UNUSED(PIN(8, 2)) UNUSED(PIN(7, 4)) UNUSED(PIN(7, 3)) UNUSED(PIN(D, 7)) UNUSED(PIN(6, 0)) -UNUSED(PIN(5, 0)) UNUSED(PIN(C, 5)) UNUSED(PIN(3, 0)) UNUSED(PIN(E, 4)) |