# Atmel SAM V71 MCU series configuration options

# Copyright (c) 2019 Gerson Fernando Budke
# Copyright (c) 2016 Piotr Mienkowski
# SPDX-License-Identifier: Apache-2.0

if SOC_SERIES_SAMV71

config SOC_SERIES
	default "samv71"

config SOC_PART_NUMBER
	default "samv71q21" if SOC_PART_NUMBER_SAMV71Q21
	default "samv71q20" if SOC_PART_NUMBER_SAMV71Q20
	default "samv71q19" if SOC_PART_NUMBER_SAMV71Q19
	default "samv71n21" if SOC_PART_NUMBER_SAMV71N21
	default "samv71n20" if SOC_PART_NUMBER_SAMV71N20
	default "samv71n19" if SOC_PART_NUMBER_SAMV71N19
	default "samv71j21" if SOC_PART_NUMBER_SAMV71J21
	default "samv71j20" if SOC_PART_NUMBER_SAMV71J20
	default "samv71j19" if SOC_PART_NUMBER_SAMV71J19
	default "samv71q21b" if SOC_PART_NUMBER_SAMV71Q21B
	default "samv71q20b" if SOC_PART_NUMBER_SAMV71Q20B
	default "samv71q19b" if SOC_PART_NUMBER_SAMV71Q19B
	default "samv71n21b" if SOC_PART_NUMBER_SAMV71N21B
	default "samv71n20b" if SOC_PART_NUMBER_SAMV71N20B
	default "samv71n19b" if SOC_PART_NUMBER_SAMV71N19B
	default "samv71j21b" if SOC_PART_NUMBER_SAMV71J21B
	default "samv71j20b" if SOC_PART_NUMBER_SAMV71J20B
	default "samv71j19b" if SOC_PART_NUMBER_SAMV71J19B

#
# SAM V71 family has in total 71 peripherals capable of generating interrupts
# for the revision A and 74 for the revision B (not all Peripheral Identifiers
# are used).
#
config NUM_IRQS
	default 74 if SOC_ATMEL_SAMV71_REVB
	default 71

config SYS_CLOCK_HW_CYCLES_PER_SEC
	default 300000000

# Configure default device drivers. If a feature is supported by more than one
# device driver the default configuration will be placed in the board defconfig
# file.

if DMA
config DMA_SAM_XDMAC
	default y
endif # DMA

if GPIO
config GPIO_SAM
	default y
endif # GPIO

if ADC
config ADC_SAM_AFEC
	default y
endif # ADC

if I2C
config I2C_SAM_TWIHS
	default y
endif # I2C

if I2S
config I2S_SAM_SSC
	default y
endif # I2S

if SPI
config SPI_SAM
	default y
endif # SPI

if USB
config USB_DC_SAM
	default y
endif # USB

if ENTROPY_GENERATOR
config ENTROPY_SAM_RNG
	default y
endif # ENTROPY_GENERATOR

if FLASH
config SOC_FLASH_SAM
	default y
endif # FLASH

if PWM
config PWM_SAM
	default y
endif # PWM

endif # SOC_SERIES_SAMV71
