summaryrefslogtreecommitdiff
path: root/board/metaknight/board.c
diff options
context:
space:
mode:
Diffstat (limited to 'board/metaknight/board.c')
-rw-r--r--board/metaknight/board.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/board/metaknight/board.c b/board/metaknight/board.c
index 4925b6e9e8..c9a47dd33e 100644
--- a/board/metaknight/board.c
+++ b/board/metaknight/board.c
@@ -144,14 +144,15 @@ static void sub_hdmi_hpd_interrupt(enum gpio_signal s)
*/
static void pen_input_deferred(void)
{
- int pen_exist = !gpio_get_level(GPIO_PEN_DET_ODL);
+ int pen_charge_enable = !gpio_get_level(GPIO_PEN_DET_ODL) &&
+ !chipset_in_state(CHIPSET_STATE_ANY_OFF);
- if (pen_exist)
+ if (pen_charge_enable)
gpio_set_level(GPIO_EN_PP3300_PEN, 1);
else
gpio_set_level(GPIO_EN_PP3300_PEN, 0);
- CPRINTS("Pen charge %sable", pen_exist ? "en" : "dis");
+ CPRINTS("Pen charge %sable", pen_charge_enable ? "en" : "dis");
}
DECLARE_DEFERRED(pen_input_deferred);
@@ -161,6 +162,13 @@ void pen_input_interrupt(enum gpio_signal signal)
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);
+
#include "gpio_list.h"
/* ADC channels */