# Kconfig - Bluetooth drivers configuration options

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

comment "Bluetooth HCI Driver Options"

# Controller support is an HCI driver in itself, so these HCI driver
# options are only applicable if controller support hasn't been enabled.
if !BLUETOOTH_CONTROLLER

config BLUETOOTH_UART
	bool

choice
	prompt "Bluetooth HCI driver"
	default BLUETOOTH_H4

config BLUETOOTH_H4
	bool "H:4 UART"
	select UART_INTERRUPT_DRIVEN
	select BLUETOOTH_UART
	select BLUETOOTH_RECV_IS_RX_THREAD
	depends on SERIAL
	help
	  Bluetooth H:4 UART driver. Requires hardware flow control
	  lines to be available.

config BLUETOOTH_H5
	bool "H:5 UART [EXPERIMENTAL]"
	select UART_INTERRUPT_DRIVEN
	select BLUETOOTH_UART
	depends on SERIAL
	help
	  Bluetooth three-wire (H:5) UART driver. Implementation of HCI
	  Three-Wire UART Transport Layer.

config BLUETOOTH_SPI
	bool "SPI HCI"
	select SPI
	help
	  Supports Bluetooth ICs using SPI as the communication protocol.
	  HCI packets are sent and received as single Byte transferrs,
	  prepended after a known header.  Headers may vary per device, so
	  additional platform specific knowlege may need to be added as
	  devices are.

config BLUETOOTH_NO_DRIVER
	bool "No default HCI driver"
	help
	  This is intended for unit tests where no internal driver
	  should be selected.

endchoice

endif # !BLUETOOTH_CONTROLLER

config BLUETOOTH_DEBUG_HCI_DRIVER
	bool "Bluetooth HCI driver debug"
	depends on BLUETOOTH_DEBUG
	help
	  This option enables debug support for the chosen
	  Bluetooth HCI driver

config BLUETOOTH_UART_ON_DEV_NAME
	string "Device Name of UART Device for Bluetooth"
	default "UART_0"
	depends on BLUETOOTH_UART
	help
	  This option specifies the name of UART device to be used
	  for Bluetooth.

config BLUETOOTH_SPI_DEV_NAME
	string "Device Name of SPI Device for Bluetooth"
	default "SPI_0"
	depends on BLUETOOTH_SPI
	help
	  This option specifies the name of SPI device to be used for Bluetooth.
	  On the controller side, this SPI device is used to encapsulate the
	  RAW HCI frames to send further up the stack. On the BLE stack side,
	  this device is used to reply back with HCI frames that are sent over
	  the air.

# Headroom that the driver needs for sending and receiving buffers.
# Add a new 'default' entry for each new driver.
config BLUETOOTH_HCI_RESERVE
	int
	# Even if no driver is selected the following default is still
	# needed e.g. for unit tests.
	default 0
	default 0 if BLUETOOTH_H4
	default 1 if BLUETOOTH_H5
	default 1 if BLUETOOTH_SPI

if BLUETOOTH_SPI

config BLUETOOTH_SPI_BLUENRG
	bool "Enable compatibility with BlueNRG-based devices"
	default n
	help
	  Enable support for devices compatible with the BlueNRG Bluetooth
	  Stack. Current driver supports: ST X-NUCLEO BLE series.

config BLUETOOTH_SPI_CHIP_SELECT_DEV_NAME
	string "Chip Select (CS) line driver name"
	depends on BLUETOOTH_SPI_BLUENRG
	help
	  This option specifies the name of GPIO driver controlling
	  the Chip Select (CS) line.

config BLUETOOTH_SPI_IRQ_DEV_NAME
	string "IRQ line driver name"
	help
	  This option specifies the name of GPIO driver controlling
	  the chip's IRQ line.

config BLUETOOTH_SPI_RESET_DEV_NAME
	string "Reset line driver name"
	help
	  This option specifies the name of GPIO driver controlling
	  the chip's Reset line.

config BLUETOOTH_SPI_CHIP_SELECT_PIN
	int "SPI Chip Select (CS) line number"
	depends on BLUETOOTH_SPI_BLUENRG
	help
	  This option specifies the Chip Select (CS) line number on the SPI
	  device

config BLUETOOTH_SPI_IRQ_PIN
	int "SPI IRQ line number"
	help
	  This option specifies the IRQ line number on the SPI device

config BLUETOOTH_SPI_RESET_PIN
	int "SPI Reset line number"
	help
	  This option specifies the Reset line number on the SPI device

config BLUETOOTH_SPI_MAX_CLK_FREQ
	int "Maximum clock frequency for the HCI SPI interface"
	default 5000000
	help
	  This option specifies the maximum clock rate the HCI SPI
	  interface is capable of running at.

endif # BLUETOOTH_SPI
