| /* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| /* STM32F072-discovery board configuration */ |
| |
| #include "common.h" |
| #include "ec_version.h" |
| #include "gpio.h" |
| #include "hooks.h" |
| #include "registers.h" |
| #include "spi.h" |
| #include "task.h" |
| #include "usb_gpio.h" |
| #include "usb_spi.h" |
| #include "util.h" |
| |
| void button_event(enum gpio_signal signal); |
| |
| #include "gpio_list.h" |
| |
| void button_event(enum gpio_signal signal) |
| { |
| static int count = 0; |
| |
| gpio_set_level(GPIO_LED_U, (count & 0x03) == 0); |
| gpio_set_level(GPIO_LED_R, (count & 0x03) == 1); |
| gpio_set_level(GPIO_LED_D, (count & 0x03) == 2); |
| gpio_set_level(GPIO_LED_L, (count & 0x03) == 3); |
| |
| count++; |
| } |
| |
| static enum gpio_signal const usb_gpio_list[] = { |
| GPIO_USER_BUTTON, |
| GPIO_LED_U, |
| GPIO_LED_D, |
| GPIO_LED_L, |
| GPIO_LED_R, |
| }; |
| |
| USB_GPIO_CONFIG(usb_gpio, |
| usb_gpio_list, |
| USB_IFACE_GPIO, |
| USB_EP_GPIO) |
| |
| const void *const usb_strings[] = { |
| [USB_STR_DESC] = usb_string_desc, |
| [USB_STR_VENDOR] = USB_STRING_DESC("Google Inc."), |
| [USB_STR_PRODUCT] = USB_STRING_DESC("discovery-stm32f072"), |
| [USB_STR_VERSION] = USB_STRING_DESC(CROS_EC_VERSION32), |
| [USB_STR_STREAM_NAME] = USB_STRING_DESC("Echo"), |
| [USB_STR_CONSOLE_NAME] = USB_STRING_DESC("Shell"), |
| }; |
| |
| BUILD_ASSERT(ARRAY_SIZE(usb_strings) == USB_STR_COUNT); |
| |
| void usb_spi_board_enable(struct usb_spi_config const *config) |
| { |
| /* Remap SPI2 to DMA channels 6 and 7 */ |
| STM32_SYSCFG_CFGR1 |= (1 << 24); |
| |
| /* Configure SPI GPIOs */ |
| gpio_config_module(MODULE_SPI_MASTER, 1); |
| |
| /* Set all four SPI pins to high speed */ |
| STM32_GPIO_OSPEEDR(GPIO_B) |= 0xff000000; |
| |
| /* Enable clocks to SPI2 module */ |
| STM32_RCC_APB1ENR |= STM32_RCC_PB1_SPI2; |
| |
| /* Reset SPI2 */ |
| STM32_RCC_APB1RSTR |= STM32_RCC_PB1_SPI2; |
| STM32_RCC_APB1RSTR &= ~STM32_RCC_PB1_SPI2; |
| |
| spi_enable(1); |
| } |
| |
| void usb_spi_board_disable(struct usb_spi_config const *config) |
| { |
| spi_enable(0); |
| |
| /* Disable clocks to SPI2 module */ |
| STM32_RCC_APB1ENR &= ~STM32_RCC_PB1_SPI2; |
| |
| /* Release SPI GPIOs */ |
| gpio_config_module(MODULE_SPI_MASTER, 0); |
| } |
| |
| USB_SPI_CONFIG(usb_spi, USB_IFACE_SPI, USB_EP_SPI); |
| |
| /* Initialize board. */ |
| static void board_init(void) |
| { |
| gpio_enable_interrupt(GPIO_USER_BUTTON); |
| |
| usb_spi_enable(&usb_spi, 1); |
| } |
| DECLARE_HOOK(HOOK_INIT, board_init, HOOK_PRIO_DEFAULT); |