# Kconfig - 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 BT

choice CLOCK_STM32_SYSCLK_SRC
	default CLOCK_STM32_SYSCLK_SRC_MSI
endchoice

if CLOCK_STM32_SYSCLK_SRC_MSI

config CLOCK_STM32_MSI_RANGE
	default 8

config SYS_CLOCK_HW_CYCLES_PER_SEC
	default 16000000

endif # CLOCK_STM32_SYSCLK_SRC_MSI

endif #BT

if !BT
choice CLOCK_STM32_SYSCLK_SRC
	default CLOCK_STM32_SYSCLK_SRC_PLL
endchoice

endif #BT

if CLOCK_STM32_SYSCLK_SRC_PLL

if CLOCK_STM32_PLL_SRC_HSI
# produce 80MHz clock at PLL output

config SYS_CLOCK_HW_CYCLES_PER_SEC
	default 80000000
config CLOCK_STM32_PLL_M_DIVISOR
	default 1
config CLOCK_STM32_PLL_N_MULTIPLIER
	default 20
config CLOCK_STM32_PLL_P_DIVISOR
	default 7
config CLOCK_STM32_PLL_Q_DIVISOR
	default 2
config CLOCK_STM32_PLL_R_DIVISOR
	default 4

endif # CLOCK_STM32_PLL_SRC_HSI

endif # CLOCK_STM32_SYSCLK_SRC_PLL

if UART_CONSOLE

config UART_STM32_PORT_1
	default y

endif # UART_CONSOLE

if I2C

config I2C_1
	default y

config I2C_2
	default y

endif # I2C

if SPI

config SPI_STM32_INTERRUPT
	default y

config SPI_3
	default y

endif # SPI

if PWM

config PWM_STM32_1
	default n

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 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

endif # BOARD_DISCO_L475_IOT1
