# Atmel SAM4S MCU series

# Copyright (c) 2017 Justin Watson
# Copyright (c) 2018 Vincent van der Locht
# SPDX-License-Identifier: Apache-2.0

choice
	prompt "Atmel SAM4S MCU Selection"
	depends on SOC_SERIES_SAM4S

	config SOC_PART_NUMBER_SAM4S16C
		bool "SAM4S16C"

	config SOC_PART_NUMBER_SAM4SA16C
		bool "SAM4SA16C"

	config SOC_PART_NUMBER_SAM4S16B
		bool "SAM4S16B"

	config SOC_PART_NUMBER_SAM4S8C
		bool "SAM4S8C"

	config SOC_PART_NUMBER_SAM4S8B
		bool "SAM4S8B"

	config SOC_PART_NUMBER_SAM4S4C
		bool "SAM4S4C"

	config SOC_PART_NUMBER_SAM4S4B
		bool "SAM4S4B"

	config SOC_PART_NUMBER_SAM4S4A
		bool "SAM4S4A"

	config SOC_PART_NUMBER_SAM4S2C
		bool "SAM4S2C"

	config SOC_PART_NUMBER_SAM4S2B
		bool "SAM4S2B"

	config SOC_PART_NUMBER_SAM4S2A
		bool "SAM4S2A"

endchoice

if SOC_SERIES_SAM4S

config SOC_ATMEL_SAM4S_EXT_SLCK
	bool "Atmel SAM4S to use external crystal oscillator for slow clock"
	help
	  Says y if you want to use external 32 kHz crystal
	  oscillator to drive the slow clock. Note that this
	  adds a few seconds to boot time, as the crystal
	  needs to stabilize after power-up.

	  Says n if you do not need accurate and precise timers.
	  The slow clock will be driven by the internal fast
	  RC oscillator running at 32 kHz.

config SOC_ATMEL_SAM4S_EXT_MAINCK
	bool "Atmel SAM4S to use external crystal oscillator for main clock"
	help
	  The main clock is being used to drive the PLL, and
	  thus driving the processor clock.

	  Says y if you want to use external crystal oscillator
	  to drive the main clock. Note that this adds about
	  a second to boot time, as the crystal needs to
	  stabilize after power-up.

	  The crystal used here can be from 3 to 20 MHz.

	  Says n here will use the internal fast RC oscillator
	  running at 12 MHz.

config SOC_ATMEL_SAM4S_PLLA_MULA
	hex "PLL MULA"
	default 0x09
	help
	  This is the multiplier (MULA) used by the PLL.
	  The processor clock is (MAINCK * (MULA + 1) / DIVA).

	  Board config file can override this settings
	  for a particular board.

	  With default of MULA == 9, and DIVA == 1,
	  PLL is running at 10 times of main clock.

config SOC_ATMEL_SAM4S_PLLA_DIVA
	hex "PLL DIVA"
	default 0x01
	help
	  This is the divider (DIVA) used by the PLL.
	  The processor clock is (MAINCK * (MULA + 1) / DIVA).

	  Board config file can override this settings
	  for a particular board.

	  With default of MULA == 9, and DIVA == 1,
	  PLL is running at 10 times of main clock.

config SOC_ATMEL_SAM4S_WAIT_MODE
	bool "Atmel SAM4S goes to Wait mode instead of Sleep mode"
	depends on SOC_ATMEL_SAM4S_EXT_MAINCK
	default y if DEBUG
	help
	  For JTAG debugging CPU clock (HCLK) should not stop. In order
	  to achieve this, make CPU go to Wait mode instead of Sleep
	  mode while using external crystal oscillator for main clock.

endif # SOC_SERIES_SAM4S
