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

if VL53L0X

config VL53L0X_XSHUT_GPIO_DEV_NAME
	default "GPIOC"

config VL53L0X_XSHUT_GPIO_PIN_NUM
	default 6

endif #VL53L0X

endif # BOARD_DISCO_L475_IOT1
