# Kconfig - Kinetis K6X MCU line
#
# Copyright (c) 2016 Open-RnD Sp. z o.o.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

choice
prompt "Kinetis K6x MCU Selection"
depends on SOC_SERIES_KINETIS_K6X

config SOC_MK64F12
	bool "SOC_MK64F12"
	select HAS_KSDK
	select CPU_HAS_FPU

endchoice

if SOC_SERIES_KINETIS_K6X

config SOC_PART_NUMBER_MK64FN1M0CAJ12
	bool

config SOC_PART_NUMBER_MK64FN1M0VDC12
	bool

config SOC_PART_NUMBER_MK64FN1M0VLL12
	bool

config SOC_PART_NUMBER_MK64FN1M0VLQ12
	bool

config SOC_PART_NUMBER_MK64FN1M0VMD12
	bool

config SOC_PART_NUMBER_MK64FX512VDC12
	bool

config SOC_PART_NUMBER_MK64FX512VLL12
	bool

config SOC_PART_NUMBER_MK64FX512VLQ12
	bool

config SOC_PART_NUMBER_MK64FX512VMD12
	bool

config SOC_PART_NUMBER_KINETIS_K6X
	string
	default "MK64FN1M0CAJ12" if SOC_PART_NUMBER_MK64FN1M0CAJ12
	default "MK64FN1M0VDC12" if SOC_PART_NUMBER_MK64FN1M0VDC12
	default "MK64FN1M0VLL12" if SOC_PART_NUMBER_MK64FN1M0VLL12
	default "MK64FN1M0VLQ12" if SOC_PART_NUMBER_MK64FN1M0VLQ12
	default "MK64FN1M0VMD12" if SOC_PART_NUMBER_MK64FN1M0VMD12
	default "MK64FX512VDC12" if SOC_PART_NUMBER_MK64FX512VDC12
	default "MK64FX512VLL12" if SOC_PART_NUMBER_MK64FX512VLL12
	default "MK64FX512VLQ12" if SOC_PART_NUMBER_MK64FX512VLQ12
	default "MK64FX512VMD12" if SOC_PART_NUMBER_MK64FX512VMD12
	help
	This string holds the full part number of the SoC. It is a hidden option
	that you should not set directly. The part number selection choice defines
	the default value for this string.

config K64_CORE_CLOCK_DIVIDER
	int
	prompt "Freescale K64 core clock divider"
	default 1
	help
	This option specifies the divide value for the K64 processor core clock
	from the system clock.

config K64_BUS_CLOCK_DIVIDER
	int
	prompt "Freescale K64 bus clock divider"
	default 2
	help
	This option specifies the divide value for the K64 bus clock from the
	system clock.

config K64_FLEXBUS_CLOCK_DIVIDER
	int
	prompt "Freescale K64 FlexBus clock divider"
	default 3
	help
	This option specifies the divide value for the K64 FlexBus clock from the
	system clock.

config K64_FLASH_CLOCK_DIVIDER
	int
	prompt "Freescale K64 flash clock divider"
	default 5
	help
	This option specifies the divide value for the K64 flash clock from the
	system clock.

config WDOG_INIT
	def_bool y
	# omit prompt to signify a "hidden" option
	help
	This processor enables the watchdog timer with a short timeout
	upon reset. Therefore, this requires that the watchdog be configured
	during reset handling.

config PRESERVE_JTAG_IO_PINS
	bool "Kinetis K6x JTAG pin usage"
	depends on PINMUX
	default y
	help
	The FRDM-K64F board routes the PTA0/1/2 pins as JTAG/SWD signals that
	are used for the OpenSDAv2 debug interface.  These pins are also routed to
	the Arduino header as D8, D3 and D5, respectively.
	Enable this option to preserve these pins for the debug interface.

endif # SOC_SERIES_KINETIS_K6X
