diff options
author | Alexandru M Stan <amstan@chromium.org> | 2020-02-06 20:46:03 -0800 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-02-11 01:59:26 +0000 |
commit | 02e0cabe5d9462d36a1df50d392d8a7d3b543ef7 (patch) | |
tree | 6276f05fc895ee90705a71179e091e4da1a837e4 | |
parent | 1bc5961c7e2d4e7e623e69f628cb0069e02b6b4d (diff) | |
download | chrome-ec-02e0cabe5d9462d36a1df50d392d8a7d3b543ef7.tar.gz |
jacuzzi: unmux pins away from emmc once we want to talk to sensors
Muxing the spi peripheral to both the emmc and bmi160 is probably not a good
idea, I'm pretty sure that creates an internal short between the emmc and
sensor pins. Disconnect them away from emmc before attempting to use them
for bmi160.
BUG=b/144892889
TEST=boot juniper, see sensor init ok
TEST=emmc still works
BRANCH=kukui
Change-Id: Iacfef625d3e7955e717372055c4d185f76a0189c
Signed-off-by: Ting Shen <phoenixshen@google.com>
Signed-off-by: Alexandru M Stan <amstan@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2043151
Reviewed-by: Nicolas Boichat <drinkcat@chromium.org>
-rw-r--r-- | board/jacuzzi/board.c | 27 | ||||
-rw-r--r-- | board/jacuzzi/gpio.inc | 5 |
2 files changed, 19 insertions, 13 deletions
diff --git a/board/jacuzzi/board.c b/board/jacuzzi/board.c index 7199f9ce12..8becdc3328 100644 --- a/board/jacuzzi/board.c +++ b/board/jacuzzi/board.c @@ -261,17 +261,24 @@ void bc12_interrupt(enum gpio_signal signal) #ifndef VARIANT_KUKUI_NO_SENSORS static void board_spi_enable(void) { - cputs(CC_ACCEL, "board_spi_enable"); - gpio_config_module(MODULE_SPI_MASTER, 1); + /* + * Pin mux spi peripheral away from emmc, since RO might have + * left them there. + */ + gpio_config_module(MODULE_SPI_FLASH, 0); - /* Enable clocks to SPI2 module */ + /* Enable clocks to SPI2 module. */ STM32_RCC_APB1ENR |= STM32_RCC_PB1_SPI2; - /* Reset SPI2 */ + /* Reset SPI2 to clear state left over from the emmc slave. */ STM32_RCC_APB1RSTR |= STM32_RCC_PB1_SPI2; STM32_RCC_APB1RSTR &= ~STM32_RCC_PB1_SPI2; + /* Reinitialize spi peripheral. */ spi_enable(CONFIG_SPI_ACCEL_PORT, 1); + + /* Pin mux spi peripheral toward the sensor. */ + gpio_config_module(MODULE_SPI_MASTER, 1); } DECLARE_HOOK(HOOK_CHIPSET_STARTUP, board_spi_enable, @@ -279,14 +286,14 @@ DECLARE_HOOK(HOOK_CHIPSET_STARTUP, static void board_spi_disable(void) { - spi_enable(CONFIG_SPI_ACCEL_PORT, 0); - - /* Disable clocks to SPI2 module */ - STM32_RCC_APB1ENR &= ~STM32_RCC_PB1_SPI2; - - gpio_config_module(MODULE_SPI_MASTER, 0); + /* Set pins to a state calming the sensor down. */ gpio_set_flags(GPIO_EC_SENSOR_SPI_CK, GPIO_OUT_LOW); gpio_set_level(GPIO_EC_SENSOR_SPI_CK, 0); + gpio_config_module(MODULE_SPI_MASTER, 0); + + /* Disable spi peripheral and clocks. */ + spi_enable(CONFIG_SPI_ACCEL_PORT, 0); + STM32_RCC_APB1ENR &= ~STM32_RCC_PB1_SPI2; } DECLARE_HOOK(HOOK_CHIPSET_SHUTDOWN, board_spi_disable, diff --git a/board/jacuzzi/gpio.inc b/board/jacuzzi/gpio.inc index 67bae7370b..61a9afba89 100644 --- a/board/jacuzzi/gpio.inc +++ b/board/jacuzzi/gpio.inc @@ -112,11 +112,10 @@ ALTERNATE(PIN_MASK(B, 0x0038), 0, MODULE_SPI, 0) ALTERNATE(PIN_MASK(A, 0x8000), 0, MODULE_SPI, 0) /* SPI2 */ -#ifdef VARIANT_KUKUI_NO_SENSORS +/* Shared between slave for emmc and master for bmi160 */ +/* They're mutually exclusive with gpio_config_module. */ /* EMMC SPI SLAVE: PB13/14/15 */ ALTERNATE(PIN_MASK(B, 0xE000), 0, MODULE_SPI_FLASH, 0) -#else /* SENSORS SPI MASTER: PB10, PB12, PC2, PC3 */ ALTERNATE(PIN_MASK(B, 0x0400), 5, MODULE_SPI_MASTER, 0) ALTERNATE(PIN_MASK(C, 0x000C), 1, MODULE_SPI_MASTER, 0) -#endif /* VARIANT_KUKUI_NO_SENSORS */ |