yorp: add board version

Hard code value to 0 for now.

BRANCH=none
BUG=b:76448181
TEST=none

Change-Id: Iefe91fb02a958f40a1ff63c122792a390a545290
Signed-off-by: Jett Rink <jettrink@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/984517
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
This commit is contained in:
Jett Rink
2018-03-28 11:19:39 -06:00
committed by chrome-bot
parent 8131eea9a7
commit aac3da46a0
3 changed files with 91 additions and 0 deletions

View File

@@ -84,6 +84,12 @@ const struct adc_t adc_channels[] = {
/* Vbus C1 sensing (10x voltage divider). PPVAR_USB_C1_VBUS */
[ADC_VBUS_C1] = {
"VBUS_C1", NPCX_ADC_CH9, ADC_MAX_VOLT*10, ADC_READ_MAX+1, 0},
/* Board ID 1. Least Significant nibble */
[ADC_BRD_ID1] = {
"BRD_ID1", NPCX_ADC_CH6, ADC_MAX_VOLT, ADC_READ_MAX+1, 0},
/* Board ID 2. Most Significant nibble */
[ADC_BRD_ID2] = {
"BRD_ID2", NPCX_ADC_CH7, ADC_MAX_VOLT, ADC_READ_MAX+1, 0},
};
BUILD_ASSERT(ARRAY_SIZE(adc_channels) == ADC_CH_COUNT);
@@ -259,6 +265,82 @@ uint16_t tcpc_get_alert_status(void)
return status;
}
static const int UNKNOWN_BRD_ID = -1;
static const int board_id_thresh_mv[] = {
/* Vin = 3.3V, Ideal voltage, R2 values listed below */
/* R1 = 51.1 kOhm */
200, /* 124 mV, 2.0 Kohm */
366, /* 278 mV, 4.7 Kohm */
550, /* 456 mV, 8.2 Kohm */
752, /* 644 mV, 12.4 Kohm */
927, /* 860 mV, 18.0 Kohm */
1073, /* 993 mV, 22.0 Kohm */
1235, /* 1152 mV, 27.4 Kohm */
1386, /* 1318 mV, 34.0 Kohm */
1552, /* 1453 mV, 40.2 Kohm */
/* R1 = 10.0 kOhm */
1739, /* 1650 mV, 10.0 Kohm */
1976, /* 1827 mV, 12.4 Kohm */
2197, /* 2121 mV, 18.0 Kohm */
2344, /* 2269 mV, 22.0 Kohm */
2484, /* 2418 mV, 27.4 Kohm */
2636, /* 2550 mV, 34.0 Kohm */
2823, /* 2721 mV, 47.0 Kohm */
};
static int read_board_id_adc(enum adc_channel chan)
{
int mv;
int i;
mv = adc_read_channel(chan);
cprints(CC_SYSTEM, "BOARD ID ADC %d = %d mV",
chan == ADC_BRD_ID1 ? 1 : 2, mv);
if (mv == ADC_READ_ERROR)
return UNKNOWN_BRD_ID;
for (i = 0; i < ARRAY_SIZE(board_id_thresh_mv); i++)
if (mv < board_id_thresh_mv[i])
return i;
return UNKNOWN_BRD_ID;
}
int board_get_version(void)
{
static int version = UNKNOWN_BRD_ID;
int level;
if (version != UNKNOWN_BRD_ID)
return version;
/* Enabled Board ID circuit and wait for it to stabilize. */
gpio_set_level(GPIO_EC_BRD_ID_EN, 1);
msleep(1);
level = read_board_id_adc(ADC_BRD_ID1);
if (level == UNKNOWN_BRD_ID)
goto error;
version = level & 0x0F;
level = read_board_id_adc(ADC_BRD_ID2);
if (level == UNKNOWN_BRD_ID)
goto error;
version = version | ((level & 0x0F) << 4);
gpio_set_level(GPIO_EC_BRD_ID_EN, 0);
cprints(CC_SYSTEM, "Board version: %d", version);
return version;
error:
gpio_set_level(GPIO_EC_BRD_ID_EN, 0);
cprints(CC_SYSTEM, "Board version unknown!");
version = UNKNOWN_BRD_ID;
return version;
}
/* Motion sensors */
/* Mutexes */
static struct mutex g_lid_mutex;

View File

@@ -30,6 +30,8 @@
#define CONFIG_VBOOT_HASH
#define CONFIG_VSTORE
#define CONFIG_VSTORE_SLOT_COUNT 1
#define CONFIG_BOARD_VERSION
#define CONFIG_BOARD_SPECIFIC_VERSION
/* EC console commands */
#define CONFIG_CMD_ACCELS
@@ -141,6 +143,8 @@
enum adc_channel {
ADC_VBUS_C0,
ADC_VBUS_C1,
ADC_BRD_ID1,
ADC_BRD_ID2,
ADC_CH_COUNT
};
@@ -170,7 +174,9 @@ enum sensor_id {
SENSOR_COUNT
};
/* Forward declare board-specific functions */
void board_reset_pd_mcu(void);
int board_get_version(void);
#endif /* !__ASSEMBLER__ */

View File

@@ -106,6 +106,9 @@ GPIO(USB_C1_HPD_1V8_ODL, PIN(C, 6), GPIO_ODR_HIGH | /* C1 DP Hotplug Detect */
GPIO(BAT_LED_ORANGE_L, PIN(C, 3), GPIO_OUT_HIGH) /* LED_1_L */
GPIO(BAT_LED_BLUE_L, PIN(C, 4), GPIO_OUT_HIGH) /* LED_2_L */
/* Board IDs */
GPIO(EC_BRD_ID_EN, PIN(9, 6), GPIO_OUT_LOW)
/* Alternate functions GPIO definitions */
/* Cr50 requires no pull-ups on UART pins. */
ALTERNATE(PIN_MASK(6, 0x30), 0, MODULE_UART, 0) /* UART from EC to Servo */