# Kconfig - Atmel WINC1500 WiFi driver options

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

menuconfig WIFI_WINC1500
	bool "WINC1500 driver support"
	default n
	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"
	default n
	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
