summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSue Chen <sue.chen@quanta.corp-partner.google.com>2021-12-21 17:44:53 +0800
committerCommit Bot <commit-bot@chromium.org>2022-01-07 02:39:27 +0000
commit99fc065cda4cd4b165efdd52cee5b664ec6e3578 (patch)
tree5cf01c2f5ff0799b05cef648d27c4f5b21c7b032
parent86d03603628e3fed9728a86f9acf06e9de435a5e (diff)
downloadchrome-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.c31
-rw-r--r--board/quackingstick/board.h1
-rw-r--r--board/quackingstick/gpio.inc4
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))