summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Chen <ben.chen2@quanta.corp-partner.google.com>2020-09-24 19:44:20 +0800
committerCommit Bot <commit-bot@chromium.org>2020-10-07 21:34:09 +0000
commit4d7e27892ec3a079dd3bb6f15a1074e3e9a95e0c (patch)
tree2427669cde684aeb5a62ea93907e7861c41ffa4a
parent63eac1804338622856672e8d24be826a0523a3df (diff)
downloadchrome-ec-4d7e27892ec3a079dd3bb6f15a1074e3e9a95e0c.tar.gz
magolor: press volume up/down by ADC Hook function
Add Vol +- volume up/down by ADC HOOK function BUG=b:167319238 BRANCH=master TEST=Press Vol+- button function work. Change-Id: I43b597db399aaa588d10a0dfd586208e5714c532 Signed-off-by: Ben Chen <ben.chen2@quanta.corp-partner.google.com> Signed-off-by: Aseda Aboagye <aaboagye@google.com> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2402498 Tested-by: Aseda Aboagye <aaboagye@chromium.org> Reviewed-by: Diana Z <dzigterman@chromium.org> Commit-Queue: Aseda Aboagye <aaboagye@chromium.org>
-rw-r--r--board/magolor/board.c52
-rw-r--r--board/magolor/board.h7
-rw-r--r--board/magolor/gpio.inc4
3 files changed, 60 insertions, 3 deletions
diff --git a/board/magolor/board.c b/board/magolor/board.c
index c2e510af1b..d173c25716 100644
--- a/board/magolor/board.c
+++ b/board/magolor/board.c
@@ -47,6 +47,11 @@
#define CPRINTS(format, args...) cprints(CC_USBCHARGE, format, ## args)
#define CPRINTF(format, args...) cprintf(CC_USBCHARGE, format, ## args)
+#define ADC_VOL_UP_MASK BIT(0)
+#define ADC_VOL_DOWN_MASK BIT(1)
+
+static uint8_t new_adc_key_state;
+
/******************************************************************************/
/* USB-A Configuration */
const int usb_port_enable[USB_PORT_COUNT] = {
@@ -559,6 +564,53 @@ uint16_t tcpc_get_alert_status(void)
return status;
}
+int adc_to_physical_value(enum gpio_signal gpio)
+{
+ if (gpio == GPIO_VOLUME_UP_L)
+ return !!(new_adc_key_state & ADC_VOL_UP_MASK);
+ else if (gpio == GPIO_VOLUME_DOWN_L)
+ return !!(new_adc_key_state & ADC_VOL_DOWN_MASK);
+
+ CPRINTS("Not a volume up or down key");
+ return 0;
+}
+
+int button_is_adc_detected(enum gpio_signal gpio)
+{
+ return (gpio == GPIO_VOLUME_DOWN_L) || (gpio == GPIO_VOLUME_UP_L);
+}
+
+static void adc_vol_key_press_check(void)
+{
+ int volt = adc_read_channel(ADC_SUB_ANALOG);
+ static uint8_t old_adc_key_state;
+ uint8_t adc_key_state_change;
+
+ if (volt > 2400 && volt < 2490) {
+ /* volume-up is pressed */
+ new_adc_key_state = ADC_VOL_UP_MASK;
+ } else if (volt > 2600 && volt < 2690) {
+ /* volume-down is pressed */
+ new_adc_key_state = ADC_VOL_DOWN_MASK;
+ } else if (volt < 2290) {
+ /* both volumn-up and volume-down are pressed */
+ new_adc_key_state = ADC_VOL_UP_MASK | ADC_VOL_DOWN_MASK;
+ } else if (volt > 2700) {
+ /* both volumn-up and volume-down are released */
+ new_adc_key_state = 0;
+ }
+ if (new_adc_key_state != old_adc_key_state) {
+ adc_key_state_change = old_adc_key_state ^ new_adc_key_state;
+ if (adc_key_state_change && ADC_VOL_UP_MASK)
+ button_interrupt(GPIO_VOLUME_UP_L);
+ if (adc_key_state_change && ADC_VOL_DOWN_MASK)
+ button_interrupt(GPIO_VOLUME_DOWN_L);
+
+ old_adc_key_state = new_adc_key_state;
+ }
+}
+DECLARE_HOOK(HOOK_TICK, adc_vol_key_press_check, HOOK_PRIO_DEFAULT);
+
#ifndef TEST_BUILD
/* This callback disables keyboard when convertibles are fully open */
void lid_angle_peripheral_enable(int enable)
diff --git a/board/magolor/board.h b/board/magolor/board.h
index fb51ea08a3..2fb9f30908 100644
--- a/board/magolor/board.h
+++ b/board/magolor/board.h
@@ -124,6 +124,12 @@
#define CONFIG_MKBP_EVENT
#define CONFIG_MKBP_USE_GPIO
+/* Volume Button feature */
+#define CONFIG_ADC_BUTTONS
+#define CONFIG_VOLUME_BUTTONS
+#define GPIO_VOLUME_UP_L GPIO_VOLUP_BTN_ODL
+#define GPIO_VOLUME_DOWN_L GPIO_VOLDN_BTN_ODL
+
#ifndef __ASSEMBLER__
#include "gpio_signal.h"
@@ -168,6 +174,5 @@ enum battery_type {
};
int board_is_sourcing_vbus(int port);
-
#endif /* !__ASSEMBLER__ */
#endif /* __CROS_EC_BOARD_H */
diff --git a/board/magolor/gpio.inc b/board/magolor/gpio.inc
index 42593db13b..68861fa7f7 100644
--- a/board/magolor/gpio.inc
+++ b/board/magolor/gpio.inc
@@ -30,8 +30,6 @@ GPIO_INT(SUB_USB_C1_INT_ODL, PIN(F, 5), GPIO_INT_FALLING | GPIO_PULL_UP, sub_us
/* Button interrupts */
GPIO_INT(H1_EC_PWR_BTN_ODL, PIN(0, 1), GPIO_INT_BOTH | GPIO_PULL_UP, power_button_interrupt)
-GPIO_INT(VOLDN_BTN_ODL, PIN(4, 0), GPIO_INT_BOTH | GPIO_PULL_UP, button_interrupt)
-GPIO_INT(VOLUP_BTN_ODL, PIN(7, 3), GPIO_INT_BOTH | GPIO_PULL_UP, button_interrupt)
/* Other interrupts */
GPIO_INT(LID_OPEN, PIN(D, 2), GPIO_INT_BOTH, lid_interrupt)
@@ -107,6 +105,8 @@ GPIO(EN_USB_A1_VBUS, PIN(F, 2), GPIO_OUT_LOW) /* Enable A1 5V Charging */
UNIMPLEMENTED(AC_PRESENT)
UNIMPLEMENTED(PG_EC_DSW_PWROK)
UNIMPLEMENTED(PG_EC_ALL_SYS_PWRGD)
+UNIMPLEMENTED(VOLDN_BTN_ODL)
+UNIMPLEMENTED(VOLUP_BTN_ODL)
/* Alternate Functions */
/* ADC */