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 /board/kukui | |
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
Diffstat (limited to 'board/kukui')
-rw-r--r-- | board/kukui/base_detect_krane.c | 176 | ||||
-rw-r--r-- | board/kukui/board.h | 5 | ||||
-rw-r--r-- | board/kukui/build.mk | 1 |
3 files changed, 2 insertions, 180 deletions
diff --git a/board/kukui/base_detect_krane.c b/board/kukui/base_detect_krane.c deleted file mode 100644 index 68c8dc5ef8..0000000000 --- a/board/kukui/base_detect_krane.c +++ /dev/null @@ -1,176 +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 "tablet_mode.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_DOCK = 1, - DEVICE_TYPE_KEYBOARD = 2, - 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_DOCK] = {141, 173}, /* 10K, 0.5K ohm */ - [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_charge(int enable) -{ - if (enable) { - struct charge_port_info info = { - .voltage = 5000, .current = 1500}; - /* - * Set supplier type to PD to have same priority as type c - * port. - */ - charge_manager_update_charge( - CHARGE_SUPPLIER_DEDICATED, CHARGE_PORT_POGO, &info); - } else { - charge_manager_update_charge( - CHARGE_SUPPLIER_DEDICATED, CHARGE_PORT_POGO, NULL); - } - pd_send_host_event(PD_EVENT_POWER_CHANGE); -} - -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; - enum kukui_pogo_device_type 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); - enable_charge(0); - tablet_set_mode(1); - break; - - case DEVICE_TYPE_DOCK: - enable_power_supply(0); - enable_charge(1); - tablet_set_mode(1); - break; - - case DEVICE_TYPE_KEYBOARD: - enable_charge(0); - enable_power_supply(1); - tablet_set_mode(0); - 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); - -static void board_pogo_charge_init(void) -{ - int i; - - /* Initialize all charge suppliers to 0 */ - for (i = 0; i < CHARGE_SUPPLIER_COUNT; i++) - charge_manager_update_charge(i, CHARGE_PORT_POGO, NULL); -} -DECLARE_HOOK(HOOK_INIT, board_pogo_charge_init, - HOOK_PRIO_CHARGE_MANAGER_INIT + 1); 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 |