# Discovery IoT L475 board configuration

# Copyright (c) 2017 Linaro Limited
# SPDX-License-Identifier: Apache-2.0

if BOARD_DISCO_L475_IOT1

config BOARD
	default "disco_l475_iot1"

if UART_CONSOLE

config UART_1
	default y

endif # UART_CONSOLE

if SERIAL

config UART_4
	default y

endif # SERIAL

if I2C

config I2C_1
	default y

config I2C_2
	default y

config I2C_3
	default y

endif # I2C

if SPI

config SPI_STM32_INTERRUPT
	default y

config SPI_1
	default y

config SPI_3
	default y

endif # SPI

if PWM

config PWM_STM32_2
	default y

endif # PWM

choice LIS3MDL_TRIGGER_MODE
	default LIS3MDL_TRIGGER_NONE
endchoice

choice HTS221_TRIGGER_MODE
	default HTS221_TRIGGER_NONE
endchoice


if VL53L0X

config VL53L0X_XSHUT_CONTROL_ENABLE
	default y

config VL53L0X_XSHUT_GPIO_DEV_NAME
	default "GPIOC"

config VL53L0X_XSHUT_GPIO_PIN_NUM
	default 6

endif # VL53L0X

if LSM6DSL

choice LSM6DSL_TRIGGER_MODE
	default LSM6DSL_TRIGGER_GLOBAL_THREAD
endchoice

endif # LSM6DSL

if BT

config SPI
	default y

choice BT_HCI_BUS_TYPE
	default BT_SPI
endchoice

config BT_SPI_BLUENRG
	default y

config BT_BLUENRG_ACI
	default y
# Disable Flow control
config BT_HCI_ACL_FLOW_CONTROL
	default n
config BT_HCI_VS_EXT
	default n

endif # BT

if WIFI

config SPI
	default y

config WIFI_ESWIFI
	default y

endif # WIFI

endif # BOARD_DISCO_L475_IOT1
