summaryrefslogtreecommitdiff
path: root/board/kukui
diff options
context:
space:
mode:
authorYilun Lin <yllin@chromium.org>2019-09-16 16:23:46 +0800
committerCommit Bot <commit-bot@chromium.org>2019-09-18 05:03:21 +0000
commitfb041cc3ac80cbf7b3fd06a52eee465912ffa076 (patch)
tree6a535a52a694636adb5d8c4cf26663bcba7dcb5b /board/kukui
parent6c2f823d413a792eb4fc61162988c8dbbc7696f2 (diff)
downloadchrome-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.c176
-rw-r--r--board/kukui/board.h5
-rw-r--r--board/kukui/build.mk1
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