From 43a0c703465d22cadff185792ba34932c4b4ba3f Mon Sep 17 00:00:00 2001 From: Shawn Nematbakhsh Date: Thu, 21 Apr 2016 11:09:53 -0700 Subject: kevin: Decode board version Decode board version from analog voltage on BOARD_ID. BUG=chrome-os-partner:52642 BRANCH=None TEST=Verify 'ver' shows "Board: 0" on proto 1 board. Signed-off-by: Shawn Nematbakhsh Change-Id: Ifdbdd2e975e463ab45d81ee6eaa4ba017a2f29c0 Reviewed-on: https://chromium-review.googlesource.com/340241 Commit-Ready: Shawn N Tested-by: Shawn N Reviewed-by: Mary Ruthven --- board/kevin/board.c | 43 +++++++++++++++++++++++++++++++++++++++++++ board/kevin/board.h | 3 +++ 2 files changed, 46 insertions(+) diff --git a/board/kevin/board.c b/board/kevin/board.c index b3169f9738..059055a84b 100644 --- a/board/kevin/board.c +++ b/board/kevin/board.c @@ -202,3 +202,46 @@ static void board_init(void) } } DECLARE_HOOK(HOOK_INIT, board_init, HOOK_PRIO_DEFAULT); + +enum kevin_board_version { + BOARD_VERSION_UNKNOWN = -1, + BOARD_VERSION_PROTO1 = 0, + BOARD_VERSION_PROTO2 = 1, + BOARD_VERSION_FUTURE = 2, + BOARD_VERSION_COUNT, +}; + +struct { + enum kevin_board_version version; + int thresh_mv; +} const kevin_board_versions[] = { + { BOARD_VERSION_PROTO1, 150 }, /* 2.2 - 3.3 ohm */ + { BOARD_VERSION_PROTO2, 250 }, /* 6.8 - 7.32 ohm */ + { BOARD_VERSION_FUTURE, 3300 }, /* ??? ohm */ +}; +BUILD_ASSERT(ARRAY_SIZE(kevin_board_versions) == BOARD_VERSION_COUNT); + +int board_get_version(void) +{ + static int version = BOARD_VERSION_UNKNOWN; + int mv; + int i; + + if (version != BOARD_VERSION_UNKNOWN) + return version; + + gpio_set_level(GPIO_EC_BOARD_ID_EN_L, 0); + /* Wait to allow cap charge */ + msleep(1); + mv = adc_read_channel(ADC_BOARD_ID); + gpio_set_level(GPIO_EC_BOARD_ID_EN_L, 1); + + for (i = 0; i < BOARD_VERSION_COUNT; ++i) { + if (mv < kevin_board_versions[i].thresh_mv) { + version = kevin_board_versions[i].version; + break; + } + } + + return version; +} diff --git a/board/kevin/board.h b/board/kevin/board.h index 05f46339ee..c2356576e8 100644 --- a/board/kevin/board.h +++ b/board/kevin/board.h @@ -18,6 +18,8 @@ #define CONFIG_SYSTEM_UNLOCKED /* Allow dangerous commands for testing */ /* Optional features */ +#define CONFIG_BOARD_VERSION +#define CONFIG_BOARD_SPECIFIC_VERSION #define CONFIG_BUTTON_COUNT 2 #define CONFIG_FLASH_SIZE 0x00080000 /* 512KB spi flash */ #define CONFIG_I2C @@ -126,6 +128,7 @@ enum power_signal { #include "registers.h" void board_reset_pd_mcu(void); +int board_get_version(void); #endif /* !__ASSEMBLER__ */ -- cgit v1.2.1