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

config GPIO_STM32_PORTA
	def_bool y

config GPIO_STM32_PORTB
	def_bool y

config GPIO_STM32_PORTC
	def_bool y

config GPIO_STM32_PORTD
	def_bool y

config GPIO_STM32_PORTE
	def_bool y

config GPIO_STM32_PORTF
	def_bool n

config GPIO_STM32_PORTG
	def_bool n

config GPIO_STM32_PORTH
	def_bool n

endif # GPIO


if SERIAL

config UART_STM32_PORT_1
	def_bool y

endif # SERIAL

if I2C

config I2C_1
	def_bool y

config I2C_2
	def_bool y

endif # I2C

if PWM

config PWM_STM32_1
	def_bool n

config PWM_STM32_2
	def_bool y

endif # PWM

if LIS3MDL

choice LIS3MDL_TRIGGER_MODE
	default LIS3MDL_TRIGGER_NONE
endchoice

endif #LIS3MDL

if HTS221

choice HTS221_TRIGGER_MODE
	default HTS221_TRIGGER_NONE
endchoice

endif #HTS221

endif # BOARD_DISCO_L475_IOT1
