# Kconfig.mcr20a - NXP MCR20A configuration options
#
#
# Copyright (c) 2017 PHYTEC Messtechnik GmbH
#
# SPDX-License-Identifier: Apache-2.0
#

menuconfig  IEEE802154_MCR20A
	bool "NXP MCR20A Driver support"
	depends on NETWORKING && SPI
	select NET_L2_IEEE802154
	default n

menuconfig IEEE802154_MCR20A_RAW
	bool "NXP MCR20A Driver RAW channel"
	depends on SPI
	select NET_L2_RAW_CHANNEL
	default n
	help
	Enable IEEE802154_MCR20A driver with RAW channel

	The MCR20A driver with RAW channel allows to export radio interface
	over USB making an USB 802.15.4 dongle.

if IEEE802154_MCR20A || IEEE802154_MCR20A_RAW

config IEEE802154_MCR20A_DRV_NAME
	string "NXP MCR20A Driver's name"
	default "mcr20a"
	help
	This option sets the driver name

config IEEE802154_MCR20A_SPI_DRV_NAME
	string "SPI driver's name to use to access MCR20A"
	default SPI_0_NAME
	help
	This option is mandatory to set which SPI controller to use in order
	to actually control the MCR20A chip.

config IEEE802154_MCR20A_SPI_FREQ
	int "SPI system frequency"
	default 4000000
	help
	This option sets the SPI controller's frequency. Beware this value
	depends on the SPI controller being used and also on the system
	clock.

config IEEE802154_MCR20A_SPI_SLAVE
	int "SPI slave linked to MCR20A"
	default 0
	help
	This option sets the SPI slave number SPI controller has to switch
	to when dealing with MCR20A chip.

config MCR20A_GPIO_IRQ_B_NAME
	string "GPIO device used for IRQ_B output of MCR20A"
	default GPIO_MCUX_PORTB_NAME

config MCR20A_GPIO_IRQ_B_PIN
	int "GPIO pin connected to IRQ_B output of MCR20A"
	default 9

config MCR20A_GPIO_RESET_NAME
	string "GPIO device used for RESET input of MCR20A"
	default GPIO_MCUX_PORTA_NAME

config MCR20A_GPIO_RESET_PIN
	int "GPIO pin connected to RESET input of MCR20A"
	default 2

config MCR20A_IS_PART_OF_KW2XD_SIP
	bool "MCR20A device is part of KW2xD SiP"
	default n
	help
	If this option is set, the driver does not perform a hardware
	reset and the CLK_OUT frequency is not set, instead these settings
	are performed during the initialization of the SoC.

choice
	prompt "CLK_OUT frequency"
	default MCR20A_CLK_OUT_4MHZ if MCR20A_IS_PART_OF_KW2XD_SIP
	default MCR20A_CLK_OUT_DISABLED
	help
	Configuration of the MCR20A clock output pin.

config MCR20A_CLK_OUT_DISABLED
	bool "Disabled"

config MCR20A_CLK_OUT_32MHZ
	bool "32 MHz"

config MCR20A_CLK_OUT_16MHZ
	bool "16 MHz"

config MCR20A_CLK_OUT_8MHZ
	bool "8 MHz"

config MCR20A_CLK_OUT_4MHZ
	bool "4 MHz"

config MCR20A_CLK_OUT_1MHZ
	bool "1 MHz"

config MCR20A_CLK_OUT_250KHZ
	bool "250 kHz"

config MCR20A_CLK_OUT_62500HZ
	bool "62500 Hz"

config MCR20A_CLK_OUT_32768HZ
	bool "32768 Hz"

endchoice

config IEEE802154_MCR20A_RX_STACK_SIZE
	int "Driver's internal RX thread stack size"
	default 800
	help
	This option sets the driver's stack size for its internal RX thread.
	The default value should be sufficient, but in case it proves to be
	a too little one, this option makes it easy to play with the size.

config IEEE802154_MCR20A_INIT_PRIO
	int "MCR20A initialization priority"
	default 80
	help
	Set the initialization priority number. Do not mess with it unless
	you know what you are doing. Beware mcr20a requires gpio and spi to
	be ready first (and sometime gpio should be the very first as spi
	might need it too). And of course it has to start before the net stack.


endif
