poppy: Add 4th board id strap, with ternary encoding

The first 3 board id straps stay binary, and the 4th is a tristate,
set as Z on all existing boards, so we translate Z=>0, 0=>1, 1=>2.

A few examples:
Z000 => rev0  (Z=>0 * 8 + 0b000 = 0)
Z010 => rev2  (Z=>0 * 8 + 0b010 = 2)
Z111 => rev7  (Z=>0 * 8 + 0b111 = 7)
0000 => rev8  (0=>1 * 8 + 0b000 = 8)
1001 => rev17 (1=>2 * 8 + 0b001 = 17)

BRANCH=none
BUG=b:62242438
TEST=make BOARD=poppy -j, flash, rev0/1/2 shows "Board ID" correctly.

Change-Id: Ifde5e1200b19a17a677875b0464775bd1cd8af1f
Reviewed-on: https://chromium-review.googlesource.com/522083
Commit-Ready: Nicolas Boichat <drinkcat@chromium.org>
Tested-by: Nicolas Boichat <drinkcat@chromium.org>
Reviewed-by: Furquan Shaikh <furquan@chromium.org>
This commit is contained in:
Nicolas Boichat
2017-06-01 13:41:40 +08:00
committed by chrome-bot
parent 3a8bba3bc3
commit 32d883ff53
3 changed files with 32 additions and 0 deletions

View File

@@ -705,6 +705,36 @@ void board_hibernate(void)
;
}
int board_get_version(void)
{
static int ver = -1;
uint8_t id4;
if (ver != -1)
return ver;
ver = 0;
/* First 3 strappings are binary. */
if (gpio_get_level(GPIO_BOARD_VERSION1))
ver |= 0x01;
if (gpio_get_level(GPIO_BOARD_VERSION2))
ver |= 0x02;
if (gpio_get_level(GPIO_BOARD_VERSION3))
ver |= 0x04;
/*
* 4th bit is using tristate strapping, ternary encoding:
* Hi-Z (id4=2) => 0, (id4=0) => 1, (id4=1) => 2
*/
id4 = gpio_get_ternary(GPIO_BOARD_VERSION4);
ver |= ((id4 + 1) % 3) * 0x08;
CPRINTS("Board ID = %d", ver);
return ver;
}
/* Lid Sensor mutex */
static struct mutex g_lid_mutex;

View File

@@ -25,6 +25,7 @@
/* EC */
#define CONFIG_ADC
#define CONFIG_BOARD_VERSION
#define CONFIG_BOARD_SPECIFIC_VERSION
#define CONFIG_BUTTON_COUNT 2
#define CONFIG_BUTTON_RECOVERY
#define CONFIG_CASE_CLOSED_DEBUG_EXTERNAL

View File

@@ -115,6 +115,7 @@ GPIO(LED_WHITE_C1, PIN(3, 0), GPIO_OUT_LOW)
GPIO(BOARD_VERSION1, PIN(C, 4), GPIO_INPUT) /* Board ID bit0 */
GPIO(BOARD_VERSION2, PIN(C, 2), GPIO_INPUT) /* Board ID bit1 */
GPIO(BOARD_VERSION3, PIN(1, 3), GPIO_INPUT) /* Board ID bit2 */
GPIO(BOARD_VERSION4, PIN(1, 7), GPIO_INPUT) /* Board ID strap 3 (ternary) */
/* Alternate functions GPIO definitions */
ALTERNATE(PIN_MASK(6, 0x30), 1, MODULE_UART, 0) /* GPIO64-65 */ /* UART from EC to Servo */