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

config LSM6DSL_I2C_MASTER_DEV_NAME
	default "I2C_2"

endif #LSM6DSL

if LPS22HB

config LPS22HB_I2C_MASTER_DEV_NAME
	default "I2C_2"

config LPS22HB_I2C_ADDR
	default 0x5D

endif #LPS22HB

if LIS3MDL

config LIS3MDL_I2C_MASTER_DEV_NAME
	default "I2C_2"

choice LIS3MDL_TRIGGER_MODE
	default LIS3MDL_TRIGGER_NONE
endchoice

config LIS3MDL_I2C_ADDR
	default 0x1E

endif #LIS3MDL

if HTS221

config HTS221_I2C_MASTER_DEV_NAME
	default "I2C_2"

choice HTS221_TRIGGER_MODE
	default HTS221_TRIGGER_NONE
endchoice

endif #HTS221

endif # BOARD_DISCO_L475_IOT1
