diff options
author | Tom Hughes <tomhughes@chromium.org> | 2021-01-25 14:31:20 -0800 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2021-01-29 21:42:07 +0000 |
commit | 8552c791688d06a1d52971868c4759246369073a (patch) | |
tree | 441438a21f07ea4bc3567af535a944c8b1275fe2 /board/nocturne_fp | |
parent | 9687476ddaa78061cd74e98259f10bfc2d26d572 (diff) | |
download | chrome-ec-8552c791688d06a1d52971868c4759246369073a.tar.gz |
fpsensor: Add FP sensor SPI detection logic
BRANCH=none
BUG=b:177908650
TEST=Flash icetower v0.2, observed FP_SPI_SEL on console
TEST=Flash nocturne, observed FP_SPI_SEL on console
Signed-off-by: Tom Hughes <tomhughes@chromium.org>
Change-Id: I2b221139fed817de4c58db3b6c8198942ab86e7b
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2648731
Reviewed-by: Craig Hesling <hesling@chromium.org>
Diffstat (limited to 'board/nocturne_fp')
-rw-r--r-- | board/nocturne_fp/board.c | 4 | ||||
-rw-r--r-- | board/nocturne_fp/fpsensor_detect.c | 23 | ||||
-rw-r--r-- | board/nocturne_fp/gpio.inc | 4 |
3 files changed, 31 insertions, 0 deletions
diff --git a/board/nocturne_fp/board.c b/board/nocturne_fp/board.c index e4886f3cc8..fdce969d7a 100644 --- a/board/nocturne_fp/board.c +++ b/board/nocturne_fp/board.c @@ -82,6 +82,10 @@ static void spi_configure(void) /* Initialize board. */ static void board_init(void) { + enum fp_sensor_spi_select spi_select = get_fp_sensor_spi_select(); + + ccprints("FP_SPI_SEL: %s", fp_sensor_spi_select_to_str(spi_select)); + spi_configure(); ccprints("TRANSPORT_SEL: %s", diff --git a/board/nocturne_fp/fpsensor_detect.c b/board/nocturne_fp/fpsensor_detect.c index 72b9b89e11..fcb0cc0ec5 100644 --- a/board/nocturne_fp/fpsensor_detect.c +++ b/board/nocturne_fp/fpsensor_detect.c @@ -4,6 +4,8 @@ */ #include "fpsensor_detect.h" +#include "gpio.h" +#include "timer.h" enum fp_sensor_type get_fp_sensor_type(void) { @@ -14,3 +16,24 @@ enum fp_transport_type get_fp_transport_type(void) { return FP_TRANSPORT_TYPE_SPI; } + +enum fp_sensor_spi_select get_fp_sensor_spi_select(void) +{ + enum fp_sensor_spi_select ret; + + gpio_set_level(GPIO_DIVIDER_HIGHSIDE, 1); + usleep(1); + switch (gpio_get_level(GPIO_FP_SPI_SEL)) { + case 0: + ret = FP_SENSOR_SPI_SELECT_DEVELOPMENT; + break; + case 1: + ret = FP_SENSOR_SPI_SELECT_PRODUCTION; + break; + default: + ret = FP_SENSOR_SPI_SELECT_UNKNOWN; + break; + } + gpio_set_level(GPIO_DIVIDER_HIGHSIDE, 0); + return ret; +} diff --git a/board/nocturne_fp/gpio.inc b/board/nocturne_fp/gpio.inc index a5ac01f1b3..1f34808203 100644 --- a/board/nocturne_fp/gpio.inc +++ b/board/nocturne_fp/gpio.inc @@ -23,11 +23,15 @@ GPIO_INT(WP, PIN(B, 7), GPIO_INT_BOTH, wp_event) GPIO(WP, PIN(B, 7), GPIO_INPUT) #endif +/* TODO(b/178808871): Only enable pull up when doing detection. */ +GPIO(FP_SPI_SEL, PIN(E, 1), GPIO_INPUT | GPIO_PULL_UP) + /* Outputs */ GPIO(EC_INT_L, PIN(A, 1), GPIO_OUT_HIGH) GPIO(FP_RST_ODL, PIN(E, 0), GPIO_OUT_HIGH) GPIO(SPI4_NSS, PIN(E, 4), GPIO_OUT_HIGH) GPIO(USER_PRES_L, PIN(C, 5), GPIO_ODR_HIGH) +GPIO(DIVIDER_HIGHSIDE, PIN(B, 8), GPIO_OUT_LOW) UNIMPLEMENTED(ENTERING_RW) |