From 5a9256d981a217615a0f13418de22afa33875f5d Mon Sep 17 00:00:00 2001 From: Scott Chao Date: Fri, 27 Mar 2020 03:58:22 -0400 Subject: damu: modify gpio as SPI for BMI160. Damu EC using SPI to communicate with BMI160, so set gpio as alternate pin. Also include CL:2043151. BUG=b:147206199 BRANCH=kukui TEST=make -j BOARD=damu TEST=make buildall TEST=No failed log when sensor init [25.483715 Accel: MS Done Init type:0x0 range:2] [25.492217 Accel ODR: 10000 - roundup 1 from config 1 [AP 0] [25.495683 Gyro: MS Done Init type:0x1 range:1000] [25.501918 Gyro ODR: 0 - roundup 0 from config 0 [AP 0]] Signed-off-by: Scott Chao Change-Id: I499762166a7021bdda2731f7b1bef0f11d61f1d1 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2123621 Reviewed-by: Ting Shen --- board/damu/board.c | 27 +++++++++++++++++---------- board/damu/gpio.inc | 10 +++++++--- 2 files changed, 24 insertions(+), 13 deletions(-) diff --git a/board/damu/board.c b/board/damu/board.c index 673978c05d..278c76727a 100644 --- a/board/damu/board.c +++ b/board/damu/board.c @@ -262,17 +262,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, @@ -280,14 +287,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/damu/gpio.inc b/board/damu/gpio.inc index 6b4a5ce117..893455bdb5 100644 --- a/board/damu/gpio.inc +++ b/board/damu/gpio.inc @@ -105,7 +105,11 @@ ALTERNATE(PIN_MASK(A, 0x1800), 5, MODULE_I2C, GPIO_ODR_HIGH ) ALTERNATE(PIN_MASK(B, 0x0038), 0, MODULE_SPI, 0) /* SPI SLAVE CS: PA15 */ ALTERNATE(PIN_MASK(A, 0x8000), 0, MODULE_SPI, 0) -#ifdef SECTION_IS_RO -/* SPI SLAVE: PB13/14/15 */ + +/* 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) -#endif +/* 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) -- cgit v1.2.1