From 3423baba30cf213a8458ca09c35c73880d3e3fc3 Mon Sep 17 00:00:00 2001 From: Scott Collyer Date: Sun, 11 Jun 2017 23:27:33 -0700 Subject: [PATCH] coral: Update board version table to account for 16 levels Coral has 16 voltage levels utilized for board ID. Compared to 8 for Reef. This CL updates the board_version table to account for 16 board version entries. In addition, insted of using a fixed error percentage upper error bar, the table entries have been set to be the mid point between two consecutive voltage levels. MOdified the existing board_get_version() function so that it calls a common function since this needs to be repeated for both board ID and board SKUs. Modified gpio enable signal name to match the schematic. Coral uses an active high enable. Added an EC console command with options id|sku0|sku1 to test each option. This CL does not include the function which will be used with the host command interface so the AP can retrieve the sku 0|1 values. BUG=b:62519010 BRANCH=none TEST=MANUAL Using the console command board_id shows the following: > board_id Wrong number of params Usage: board_id > board_id id [44.484516 ID/SKU ADC 2 = 123 mV] Board id|sku: chan 2 = 0 > board_id sku0 [56.850566 ID/SKU ADC 4 = 123 mV] Board id|sku: chan 4 = 0 > board_id sku1 [65.547598 ID/SKU ADC 3 = 123 mV] Board id|sku: chan 3 = 0 Change-Id: Iaba146c12c6d9d2c57973569d51c1b7ad3212455 Signed-off-by: Scott Collyer Reviewed-on: https://chromium-review.googlesource.com/530907 Commit-Ready: Scott Collyer Tested-by: Scott Collyer Reviewed-by: Patrick Georgi --- board/coral/board.c | 94 +++++++++++++++++++++++++++++++++----------- board/coral/board.h | 10 +++++ board/coral/gpio.inc | 2 +- 3 files changed, 83 insertions(+), 23 deletions(-) diff --git a/board/coral/board.c b/board/coral/board.c index 0e2923bf83..54395246a0 100644 --- a/board/coral/board.c +++ b/board/coral/board.c @@ -148,6 +148,12 @@ const struct adc_t adc_channels[] = { [ADC_BOARD_ID] = { "BRD_ID", NPCX_ADC_CH2, ADC_MAX_VOLT, ADC_READ_MAX + 1, 0 }, + [ADC_BOARD_SKU_1] = { + "BRD_SKU_1", NPCX_ADC_CH3, ADC_MAX_VOLT, ADC_READ_MAX + 1, 0 + }, + [ADC_BOARD_SKU_0] = { + "BRD_SKU_0", NPCX_ADC_CH4, ADC_MAX_VOLT, ADC_READ_MAX + 1, 0 + }, }; BUILD_ASSERT(ARRAY_SIZE(adc_channels) == ADC_CH_COUNT); @@ -1078,35 +1084,42 @@ struct { enum coral_board_version version; int thresh_mv; } const coral_board_versions[] = { - /* Vin = 3.3V, R1 = 46.4K, R2 values listed below */ - { BOARD_VERSION_1, 328 * 1.03 }, /* 5.11 Kohm */ - { BOARD_VERSION_2, 670 * 1.03 }, /* 11.8 Kohm */ - { BOARD_VERSION_3, 1012 * 1.03 }, /* 20.5 Kohm */ - { BOARD_VERSION_4, 1357 * 1.03 }, /* 32.4 Kohm */ - { BOARD_VERSION_5, 1690 * 1.03 }, /* 48.7 Kohm */ - { BOARD_VERSION_6, 2020 * 1.03 }, /* 73.2 Kohm */ - { BOARD_VERSION_7, 2352 * 1.03 }, /* 115 Kohm */ - { BOARD_VERSION_8, 2802 * 1.03 }, /* 261 Kohm */ + /* Vin = 3.3V, Ideal voltage, R2 values listed below */ + /* R1 = 51.1 kOhm */ + { BOARD_VERSION_1, 200 }, /* 124 mV, 2.0 Kohm */ + { BOARD_VERSION_2, 366 }, /* 278 mV, 4.7 Kohm */ + { BOARD_VERSION_3, 550 }, /* 456 mV, 8.2 Kohm */ + { BOARD_VERSION_4, 752 }, /* 644 mV, 12.4 Kohm */ + { BOARD_VERSION_5, 927}, /* 860 mV, 18.0 Kohm */ + { BOARD_VERSION_6, 1073 }, /* 993 mV, 22.0 Kohm */ + { BOARD_VERSION_7, 1235 }, /* 1152 mV, 27.4 Kohm */ + { BOARD_VERSION_8, 1386 }, /* 1318 mV, 34.0 Kohm */ + { BOARD_VERSION_9, 1552 }, /* 1453 mV, 40.2 Kohm */ + /* R1 = 10.0 kOhm */ + { BOARD_VERSION_10, 1739 }, /* 1650 mV, 10.0 Kohm */ + { BOARD_VERSION_11, 1976 }, /* 1827 mV, 12.4 Kohm */ + { BOARD_VERSION_12, 2197 }, /* 2121 mV, 18.0 Kohm */ + { BOARD_VERSION_13, 2344 }, /* 2269 mV, 22.0 Kohm */ + { BOARD_VERSION_14, 2484 }, /* 2418 mV, 27.4 Kohm */ + { BOARD_VERSION_15, 2636 }, /* 2550 mV, 34.0 Kohm */ + { BOARD_VERSION_16, 2823 }, /* 2721 mV, 47.0 Kohm */ }; BUILD_ASSERT(ARRAY_SIZE(coral_board_versions) == BOARD_VERSION_COUNT); -int board_get_version(void) +static int board_read_version(enum adc_channel chan) { - static int version = BOARD_VERSION_UNKNOWN; - int mv, i; + int mv; + int i; + int version; - if (version != BOARD_VERSION_UNKNOWN) - return version; - - /* FIXME(dhendrix): enable ADC */ - gpio_set_flags(GPIO_EC_BRD_ID_EN_ODL, GPIO_ODR_HIGH); - gpio_set_level(GPIO_EC_BRD_ID_EN_ODL, 0); + /* ID/SKU enable is active high */ + gpio_set_flags(GPIO_EC_BRD_ID_EN, GPIO_OUT_HIGH); /* Wait to allow cap charge */ msleep(1); - mv = adc_read_channel(ADC_BOARD_ID); - /* FIXME(dhendrix): disable ADC */ - gpio_set_level(GPIO_EC_BRD_ID_EN_ODL, 1); - gpio_set_flags(GPIO_EC_BRD_ID_EN_ODL, GPIO_INPUT); + mv = adc_read_channel(chan); + CPRINTS("ID/SKU ADC %d = %d mV", chan, mv); + /* Disable ID/SKU circuit */ + gpio_set_flags(GPIO_EC_BRD_ID_EN, GPIO_INPUT); if (mv == ADC_READ_ERROR) { version = BOARD_VERSION_UNKNOWN; @@ -1120,10 +1133,47 @@ int board_get_version(void) } } + return version; +} + +int board_get_version(void) +{ + static int version = BOARD_VERSION_UNKNOWN; + + if (version != BOARD_VERSION_UNKNOWN) + return version; + + version = board_read_version(ADC_BOARD_ID); + CPRINTS("Board version: %d", version); return version; } +static int command_board_id(int argc, char **argv) +{ + enum adc_channel chan; + + if (argc < 2) + return EC_ERROR_PARAM_COUNT; + + if (!strcasecmp(argv[1], "id")) + chan = ADC_BOARD_ID; + else if (!strcasecmp(argv[1], "sku0")) + chan = ADC_BOARD_SKU_0; + else if (!strcasecmp(argv[1], "sku1")) + chan = ADC_BOARD_SKU_1; + else + return EC_ERROR_PARAM1; + + ccprintf("Board id|sku: chan %d = %d\n", chan, + board_read_version(chan)); + + return EC_SUCCESS; +} +DECLARE_CONSOLE_COMMAND(board_id, command_board_id, + "", + "Get board id or sku"); + /* Keyboard scan setting */ struct keyboard_scan_config keyscan_config = { /* diff --git a/board/coral/board.h b/board/coral/board.h index 097137b9b0..45de22ba09 100644 --- a/board/coral/board.h +++ b/board/coral/board.h @@ -226,6 +226,8 @@ enum adc_channel { ADC_TEMP_SENSOR_CHARGER, /* ADC0 */ ADC_TEMP_SENSOR_AMB, /* ADC1 */ ADC_BOARD_ID, /* ADC2 */ + ADC_BOARD_SKU_1, /* ADC3 */ + ADC_BOARD_SKU_0, /* ADC4 */ ADC_CH_COUNT }; @@ -290,6 +292,14 @@ enum coral_board_version { BOARD_VERSION_6, BOARD_VERSION_7, BOARD_VERSION_8, + BOARD_VERSION_9, + BOARD_VERSION_10, + BOARD_VERSION_11, + BOARD_VERSION_12, + BOARD_VERSION_13, + BOARD_VERSION_14, + BOARD_VERSION_15, + BOARD_VERSION_16, BOARD_VERSION_COUNT, }; diff --git a/board/coral/gpio.inc b/board/coral/gpio.inc index ee197c7a6a..0acd7eb48b 100644 --- a/board/coral/gpio.inc +++ b/board/coral/gpio.inc @@ -72,7 +72,7 @@ GPIO(PCH_SCI_L, PIN(A, 7), GPIO_ODR_HIGH | GPIO_SEL_1P8V) /* EC_SCI_ODL */ GPIO(PCH_SLP_S0_L, PIN(7, 5), GPIO_INPUT) /* SLP_S0_L */ /* Enable for board and SKU ID ADCs */ -GPIO(EC_BRD_ID_EN_ODL, PIN(3, 5), GPIO_INPUT) +GPIO(EC_BRD_ID_EN, PIN(3, 5), GPIO_INPUT) GPIO(CCD_MODE_ODL, PIN(6, 3), GPIO_INPUT) GPIO(EC_HAVEN_RESET_ODL, PIN(0, 2), GPIO_ODR_HIGH)