# Copyright (c) 2020 Gerson Fernando Budke <nandojve@gmail.com>
# SPDX-License-Identifier: Apache-2.0

if SHIELD_ATMEL_RF2XX || \
	SHIELD_ATMEL_RF2XX_ARDUINO || \
	SHIELD_ATMEL_RF2XX_MIKROBUS || \
	SHIELD_ATMEL_RF2XX_XPRO || \
	SHIELD_ATMEL_RF2XX_LEGACY || \
	SHIELD_ATMEL_RF2XX_XPLAINED

if NETWORKING

config NET_CONFIG_IEEE802154_DEV_NAME
	default "RF2XX_0"
	depends on IEEE802154_RF2XX

orsource "boards/*.defconfig"

endif	# NETWORKING

endif	# SHIELD_ATMEL_RF2XX || \
	# SHIELD_ATMEL_RF2XX_ARDUINO || \
	# SHIELD_ATMEL_RF2XX_MIKROBUS || \
	# SHIELD_ATMEL_RF2XX_XPRO || \
	# SHIELD_ATMEL_RF2XX_LEGACY || \
	# SHIELD_ATMEL_RF2XX_XPLAINED
