# Kconfig - Atmel WINC1500 WiFi driver options

#
# Copyright (c) 2015 Intel Corporation
#
# SPDX-License-Identifier: Apache-2.0
#

menuconfig WIFI_WINC1500
	bool "WINC1500 driver support"
	select ATMEL_WINC1500
	select WIFI_OFFLOAD
	select NET_L2_WIFI_MGMT

if WIFI_WINC1500

config WIFI_WINC1500_NAME
	string "Driver name"
	default "WINC1500"

config WIFI_WINC1500_SPI_DRV_NAME
	string "SPI device where WINC1500 is connected"
	default "SPI_1"
	help
	 Specify the device name of the SPI device to which WINC1500 is
	 connected.

config WIFI_WINC1500_SPI_SLAVE
	int "SPI Slave Select where WINC1500 is connected"
	default 1
	help
	 Specify the slave select pin of the SPI to which WINC1500 is
	 connected.

config WIFI_WINC1500_SPI_FREQ
	int "SPI frequency to use with WINC1500"
	default 8000000
	help
	 SPI frequency to use with WINC1500

config WIFI_WINC1500_GPIO_SPI_CS
	bool "Manage SPI CS through a GPIO pin"
	help
	  This option is useful if one needs to manage SPI CS through a GPIO
	  pin to by-pass the SPI controller's CS logic.

config WIFI_WINC1500_GPIO_SPI_CS_DRV_NAME
	string "GPIO driver's name to use to drive SPI CS through"
	default ""
	depends on WIFI_WINC1500_GPIO_SPI_CS
	help
	  This option is mandatory to set which GPIO controller to use in
	  order to actually emulate the SPI CS.

config WIFI_WINC1500_GPIO_SPI_CS_PIN
	int "GPIO PIN to use to drive SPI CS through"
	default 0
	depends on WIFI_WINC1500_GPIO_SPI_CS
	help
	  This option is mandatory to set which GPIO pin to use in order
	  to actually emulate the SPI CS.

config WIFI_WINC1500_THREAD_STACK_SIZE
	int "HAL callback handler thread stack size"
	default 2048
	help
	  This option sets the size of the stack used by the thread handling
	  WINC1500 HAL callbacks. Do not touch it unless you know what you are
	  doing.

config WIFI_WINC1500_THREAD_PRIO
	int "HAL callback handler thread priority"
	default 2
	help
	  This option sets the priority of the thread handling WINC1500 HAL
	  callbacks. Do not touch it unless you know what you are doing.

config WIFI_WINC1500_BUF_CTR
	int "Number of buffer per-buffer pool"
	default 1
	help
	 Set the number of buffer the driver will have access to in each of
	 its buffer pools.

config WIFI_WINC1500_MAX_PACKET_SIZE
	int "Maximum size of a packet, in bytes"
	default 1500
	help
	 Set the maximum size of a network packet going through the chip.
	 This sets the size of each buffer, in each buffer pools.
	 Do not modify it unless you know what you are doing.

config WIFI_WINC1500_OFFLOAD_MAX_SOCKETS
	int "Maximum number of sockets that can be managed"
	default 2
	help
	 Set the number of sockets that can be managed through the driver
	 and the chip.

choice
	bool "In which region is the chip running?"
	default WIFI_WINC1500_REGION_NORTH_AMERICA

config WIFI_WINC1500_REGION_NORTH_AMERICA
	bool "Region North America"

config WIFI_WINC1500_REGION_EUROPE
	bool "Region Europe"

config WIFI_WINC1500_REGION_ASIA
	bool "Region Asia"

endchoice

endif # WIFI_WINC1500
