# Degu Evaluation Kit configuration

# Copyright (c) 2019 Atmark Techno, Inc.
# SPDX-License-Identifier: Apache-2.0

if BOARD_DEGU_EVK

config BOARD
	default "degu_evk"

if USB

config USB_NRFX
	default y

config USB_DEVICE_STACK
	default y

endif # USB

if IEEE802154

config IEEE802154_NRF5
	default y

endif # IEEE802154

if I2C

config I2C_0
	default y

config I2C_1
	default y

endif # I2C

if I2C_0

choice I2C_0_NRF_TYPE
	default I2C_0_NRF_TWIM

endchoice

endif # I2C_0

if I2C_1

choice I2C_1_NRF_TYPE
	default I2C_1_NRF_TWIM

endchoice

endif # I2C_1

if ADC

config ADC_0
	default y

endif # ADC

if DISK_ACCESS_FLASH

config DISK_FLASH_DEV_NAME
	default "NRF_FLASH_DRV_NAME"

config DISK_FLASH_START
	default 0xf8000

config DISK_FLASH_MAX_RW_SIZE
	default 4

config DISK_ERASE_BLOCK_SIZE
	default 0x1000

config DISK_FLASH_ERASE_ALIGNMENT
	default 0x1000

config DISK_VOLUME_SIZE
	default 0x8000

endif # DISK_ACCESS_FLASH

endif # BOARD_DEGU_EVK
