diff options
author | Yilun Lin <yllin@chromium.org> | 2019-09-16 16:23:46 +0800 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2019-09-18 05:03:21 +0000 |
commit | fb041cc3ac80cbf7b3fd06a52eee465912ffa076 (patch) | |
tree | 6a535a52a694636adb5d8c4cf26663bcba7dcb5b | |
parent | 6c2f823d413a792eb4fc61162988c8dbbc7696f2 (diff) | |
download | chrome-ec-fb041cc3ac80cbf7b3fd06a52eee465912ffa076.tar.gz |
baseboard/kukui: Move base_detect_* into baseboard
The implementation of base detection in Kodama and Krane are very
similar. This CL unify the implementation by adding
VARIANT_KUKUI_POGO_KEYBOARD and VARIANT_KUKUI_POGO_DOCK.
VARIANT_KUKUI_POGO_KEYBOARD is a mandatory config if pick and
VARIANT_KUKUI_POGO_DOCK is optional.
TEST=make buildall
BUG=b:140608847
BRANCH=none
Change-Id: I068905d8a52404eda6709d88543fcb6042db7378
Signed-off-by: Yilun Lin <yllin@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1806633
-rw-r--r-- | baseboard/kukui/base_detect_kukui.c (renamed from board/kukui/base_detect_krane.c) | 14 | ||||
-rw-r--r-- | baseboard/kukui/baseboard.h | 14 | ||||
-rw-r--r-- | baseboard/kukui/build.mk | 2 | ||||
-rw-r--r-- | board/kodama/base_detect_kodama.c | 134 | ||||
-rw-r--r-- | board/kodama/board.h | 1 | ||||
-rw-r--r-- | board/kodama/build.mk | 2 | ||||
-rw-r--r-- | board/kukui/board.h | 5 | ||||
-rw-r--r-- | board/kukui/build.mk | 1 |
8 files changed, 32 insertions, 141 deletions
diff --git a/board/kukui/base_detect_krane.c b/baseboard/kukui/base_detect_kukui.c index 68c8dc5ef8..f72988543f 100644 --- a/board/kukui/base_detect_krane.c +++ b/baseboard/kukui/base_detect_kukui.c @@ -31,8 +31,10 @@ enum kukui_pogo_device_type { DEVICE_TYPE_ERROR = -2, DEVICE_TYPE_UNKNOWN = -1, DEVICE_TYPE_DETACHED = 0, - DEVICE_TYPE_DOCK = 1, - DEVICE_TYPE_KEYBOARD = 2, +#ifdef VARIANT_KUKUI_POGO_DOCK + DEVICE_TYPE_DOCK, +#endif + DEVICE_TYPE_KEYBOARD, DEVICE_TYPE_COUNT, }; @@ -40,7 +42,9 @@ struct { int mv_low, mv_high; } static const pogo_detect_table[] = { [DEVICE_TYPE_DETACHED] = {2700, 3500}, /* 10K, NC, around 3.3V */ +#ifdef VARIANT_KUKUI_POGO_DOCK [DEVICE_TYPE_DOCK] = {141, 173}, /* 10K, 0.5K ohm */ +#endif [DEVICE_TYPE_KEYBOARD] = {270, 400}, /* 10K, 1K ohm */ }; BUILD_ASSERT(ARRAY_SIZE(pogo_detect_table) == DEVICE_TYPE_COUNT); @@ -65,6 +69,7 @@ static enum kukui_pogo_device_type get_device_type(int mv) static void enable_charge(int enable) { +#ifdef VARIANT_KUKUI_POGO_DOCK if (enable) { struct charge_port_info info = { .voltage = 5000, .current = 1500}; @@ -79,6 +84,7 @@ static void enable_charge(int enable) CHARGE_SUPPLIER_DEDICATED, CHARGE_PORT_POGO, NULL); } pd_send_host_event(PD_EVENT_POWER_CHANGE); +#endif } static void enable_power_supply(int enable) @@ -128,11 +134,13 @@ static void base_detect_deferred(void) tablet_set_mode(1); break; +#ifdef VARIANT_KUKUI_POGO_DOCK case DEVICE_TYPE_DOCK: enable_power_supply(0); enable_charge(1); tablet_set_mode(1); break; +#endif case DEVICE_TYPE_KEYBOARD: enable_charge(0); @@ -164,6 +172,7 @@ static void base_init(void) } DECLARE_HOOK(HOOK_INIT, base_init, HOOK_PRIO_INIT_ADC + 1); +#ifdef VARIANT_KUKUI_POGO_DOCK static void board_pogo_charge_init(void) { int i; @@ -174,3 +183,4 @@ static void board_pogo_charge_init(void) } DECLARE_HOOK(HOOK_INIT, board_pogo_charge_init, HOOK_PRIO_CHARGE_MANAGER_INIT + 1); +#endif diff --git a/baseboard/kukui/baseboard.h b/baseboard/kukui/baseboard.h index 345eff86db..3bd6862426 100644 --- a/baseboard/kukui/baseboard.h +++ b/baseboard/kukui/baseboard.h @@ -58,6 +58,20 @@ #endif /* VARIANT_KUKUI_CHARGER */ /* + * Variant pogo defines, if pick, VARIANT_KUKUI_POGO_KEYBOARD is mandatory + * VARIANT_KUKUI_POGO_KEYBOARD + * VARIANT_KUKUI_POGO_DOCK + */ +#ifdef VARIANT_KUKUI_POGO_DOCK +#ifndef VARIANT_KUKUI_POGO_KEYBOARD +#error VARIANT_KUKUI_POGO_KEYBOARD is mandatory if use dock +#endif /* !VARIANT_KUKUI_POGO_KEYBOARD */ +#undef CONFIG_DEDICATED_CHARGE_PORT_COUNT +#define CONFIG_DEDICATED_CHARGE_PORT_COUNT 1 +#define DEDICATED_CHARGE_PORT 1 +#endif /* VARIANT_KUKUI_POGO_DOCK */ + +/* * Define this flag if board controls dp mux via gpio pins USB_C0_DP_OE_L and * USB_C0_DP_POLARITY. * diff --git a/baseboard/kukui/build.mk b/baseboard/kukui/build.mk index 465df10aa9..cd0b5a7353 100644 --- a/baseboard/kukui/build.mk +++ b/baseboard/kukui/build.mk @@ -16,4 +16,6 @@ baseboard-$(VARIANT_KUKUI_BATTERY_SMART)+=battery_smart.o baseboard-$(VARIANT_KUKUI_CHARGER_MT6370)+=charger_mt6370.o +baseboard-$(VARIANT_KUKUI_POGO_KEYBOARD)+=base_detect_kukui.o + $(out)/RO/baseboard/$(BASEBOARD)/emmc.o: $(out)/bootblock_data.h diff --git a/board/kodama/base_detect_kodama.c b/board/kodama/base_detect_kodama.c deleted file mode 100644 index d118c4c4cb..0000000000 --- a/board/kodama/base_detect_kodama.c +++ /dev/null @@ -1,134 +0,0 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#include "adc.h" -#include "board.h" -#include "charge_manager.h" -#include "console.h" -#include "gpio.h" -#include "hooks.h" -#include "timer.h" -#include "usb_pd.h" -#include "util.h" - -#define CPRINTS(format, args...) cprints(CC_USB, format, ## args) - -/* Krane base detection code */ - -/* Base detection and debouncing */ -#define BASE_DETECT_DEBOUNCE_US (20 * MSEC) - -/* - * If the base status is unclear (i.e. not within expected ranges, read - * the ADC value again every 500ms. - */ -#define BASE_DETECT_RETRY_US (500 * MSEC) - -enum kukui_pogo_device_type { - DEVICE_TYPE_ERROR = -2, - DEVICE_TYPE_UNKNOWN = -1, - DEVICE_TYPE_DETACHED = 0, - DEVICE_TYPE_KEYBOARD = 1, - DEVICE_TYPE_COUNT, -}; - -struct { - int mv_low, mv_high; -} static const pogo_detect_table[] = { - [DEVICE_TYPE_DETACHED] = {2700, 3500}, /* 10K, NC, around 3.3V */ - [DEVICE_TYPE_KEYBOARD] = {270, 400}, /* 10K, 1K ohm */ -}; -BUILD_ASSERT(ARRAY_SIZE(pogo_detect_table) == DEVICE_TYPE_COUNT); - -static uint64_t base_detect_debounce_time; - -static enum kukui_pogo_device_type get_device_type(int mv) -{ - int i; - - if (mv == ADC_READ_ERROR) - return DEVICE_TYPE_ERROR; - - for (i = 0; i < DEVICE_TYPE_COUNT; i++) { - if (pogo_detect_table[i].mv_low <= mv && - mv <= pogo_detect_table[i].mv_high) - return i; - } - - return DEVICE_TYPE_UNKNOWN; -} - -static void enable_power_supply(int enable) -{ - gpio_set_level(GPIO_EN_PP3300_POGO, enable); -} - -static void base_detect_deferred(void); -DECLARE_DEFERRED(base_detect_deferred); - -static void base_detect_deferred(void) -{ - uint64_t time_now = get_time().val; - int mv; - int device_type; - - if (base_detect_debounce_time > time_now) { - hook_call_deferred(&base_detect_deferred_data, - base_detect_debounce_time - time_now); - return; - } - - /* - * Disable interrupt first to prevent it triggered by value - * changed from 1 to disabled state(=0). - */ - gpio_disable_interrupt(GPIO_POGO_ADC_INT_L); - gpio_set_flags(GPIO_POGO_ADC_INT_L, GPIO_ANALOG); - mv = adc_read_channel(ADC_POGO_ADC_INT_L); - /* restore the pin function */ - gpio_set_flags(GPIO_POGO_ADC_INT_L, GPIO_INT_BOTH); - gpio_enable_interrupt(GPIO_POGO_ADC_INT_L); - - device_type = get_device_type(mv); - CPRINTS("POGO: adc=%d, device_type=%d", mv, device_type); - - switch (device_type) { - case DEVICE_TYPE_ERROR: - case DEVICE_TYPE_UNKNOWN: - hook_call_deferred(&base_detect_deferred_data, - BASE_DETECT_RETRY_US); - break; - - case DEVICE_TYPE_DETACHED: - enable_power_supply(0); - break; - - case DEVICE_TYPE_KEYBOARD: - enable_power_supply(1); - break; - - case DEVICE_TYPE_COUNT: - /* should not happen */ - break; - } -} - -void pogo_adc_interrupt(enum gpio_signal signal) -{ - uint64_t time_now = get_time().val; - - if (base_detect_debounce_time <= time_now) { - hook_call_deferred(&base_detect_deferred_data, - BASE_DETECT_DEBOUNCE_US); - } - - base_detect_debounce_time = time_now + BASE_DETECT_DEBOUNCE_US; -} - -static void base_init(void) -{ - hook_call_deferred(&base_detect_deferred_data, 0); -} -DECLARE_HOOK(HOOK_INIT, base_init, HOOK_PRIO_INIT_ADC + 1); diff --git a/board/kodama/board.h b/board/kodama/board.h index 8ccb962edb..771bf5f81e 100644 --- a/board/kodama/board.h +++ b/board/kodama/board.h @@ -10,6 +10,7 @@ #define VARIANT_KUKUI_BATTERY_SMART #define VARIANT_KUKUI_CHARGER_MT6370 +#define VARIANT_KUKUI_POGO_KEYBOARD #ifndef SECTION_IS_RW #define VARIANT_KUKUI_NO_SENSORS diff --git a/board/kodama/build.mk b/board/kodama/build.mk index 72d5a37433..0b3565fd84 100644 --- a/board/kodama/build.mk +++ b/board/kodama/build.mk @@ -12,4 +12,4 @@ CHIP_FAMILY:=stm32f0 CHIP_VARIANT:=stm32f09x BASEBOARD:=kukui -board-y=base_detect_kodama.o battery.o board.o led.o +board-y=battery.o board.o led.o diff --git a/board/kukui/board.h b/board/kukui/board.h index b86b9d92bf..31125cf9e5 100644 --- a/board/kukui/board.h +++ b/board/kukui/board.h @@ -10,6 +10,8 @@ #ifdef BOARD_KRANE #define VARIANT_KUKUI_BATTERY_MM8013 +#define VARIANT_KUKUI_POGO_KEYBOARD +#define VARIANT_KUKUI_POGO_DOCK #else #define VARIANT_KUKUI_BATTERY_MAX17055 #endif @@ -36,9 +38,6 @@ #ifdef BOARD_KRANE #define CONFIG_CHARGER_MT6370_BACKLIGHT -#undef CONFIG_DEDICATED_CHARGE_PORT_COUNT -#define CONFIG_DEDICATED_CHARGE_PORT_COUNT 1 -#define DEDICATED_CHARGE_PORT 1 #endif /* BOARD_KRANE */ #ifdef BOARD_KUKUI diff --git a/board/kukui/build.mk b/board/kukui/build.mk index 337649bcb9..694879cee6 100644 --- a/board/kukui/build.mk +++ b/board/kukui/build.mk @@ -13,4 +13,3 @@ CHIP_VARIANT:=stm32f09x BASEBOARD:=kukui board-y=board.o led.o -board-$(BOARD_KRANE)+=base_detect_krane.o |