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 <id | sku0 | sku1>
> 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 <scollyer@google.com>
Reviewed-on: https://chromium-review.googlesource.com/530907
Commit-Ready: Scott Collyer <scollyer@chromium.org>
Tested-by: Scott Collyer <scollyer@chromium.org>
Reviewed-by: Patrick Georgi <pgeorgi@chromium.org>
This commit is contained in:
Scott Collyer
2017-06-11 23:27:33 -07:00
committed by chrome-bot
parent 32d883ff53
commit 3423baba30
3 changed files with 83 additions and 23 deletions

View File

@@ -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,
"<id|sku0|sku1>",
"Get board id or sku");
/* Keyboard scan setting */
struct keyboard_scan_config keyscan_config = {
/*

View File

@@ -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,
};

View File

@@ -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)