summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShawn Nematbakhsh <shawnn@chromium.org>2016-04-21 11:09:53 -0700
committerchrome-bot <chrome-bot@chromium.org>2016-04-29 14:38:06 -0700
commit43a0c703465d22cadff185792ba34932c4b4ba3f (patch)
treea0b08e2844adfff6728ab3872b481e7146d37532
parent90145968b22e9578cc2f008fa4a6947f6168d48a (diff)
downloadchrome-ec-43a0c703465d22cadff185792ba34932c4b4ba3f.tar.gz
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 <shawnn@chromium.org> Change-Id: Ifdbdd2e975e463ab45d81ee6eaa4ba017a2f29c0 Reviewed-on: https://chromium-review.googlesource.com/340241 Commit-Ready: Shawn N <shawnn@chromium.org> Tested-by: Shawn N <shawnn@chromium.org> Reviewed-by: Mary Ruthven <mruthven@chromium.org>
-rw-r--r--board/kevin/board.c43
-rw-r--r--board/kevin/board.h3
2 files changed, 46 insertions, 0 deletions
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__ */