# SPDX-License-Identifier: GPL-2.0

menu "Bluetooth device drivers"
	depends on BT

config BT_INTEL
	tristate
	select REGMAP

config BT_BCM
	tristate
	select FW_LOADER

config BT_RTL
	tristate
	select FW_LOADER

config BT_QCA
	tristate
	select FW_LOADER

config BT_HCIBTUSB
	tristate "HCI USB driver"
	depends on USB
	select BT_INTEL
	help
	  Bluetooth HCI USB driver.
	  This driver is required if you want to use Bluetooth devices with
	  USB interface.

	  Say Y here to compile support for Bluetooth USB devices into the
	  kernel or say M to compile it as module (btusb).

config BT_HCIBTUSB_AUTOSUSPEND
	bool "Enable USB autosuspend for Bluetooth USB devices by default"
	depends on BT_HCIBTUSB
	help
	  Say Y here to enable USB autosuspend for Bluetooth USB devices by
	  default.

	  This can be overridden by passing btusb.enable_autosuspend=[y|n]
	  on the kernel commandline.

config BT_HCIBTUSB_BCM
	bool "Broadcom protocol support"
	depends on BT_HCIBTUSB
	select BT_BCM
	default y
	help
	  The Broadcom protocol support enables firmware and patchram
	  download support for Broadcom Bluetooth controllers.

	  Say Y here to compile support for Broadcom protocol.

config BT_HCIBTUSB_MTK
	bool "MediaTek protocol support"
	depends on BT_HCIBTUSB
	default n
	help
	  The MediaTek protocol support enables firmware download
	  support and chip initialization for MediaTek Bluetooth
	  USB controllers.

	  Say Y here to compile support for MediaTek protocol.

config BT_HCIBTUSB_RTL
	bool "Realtek protocol support"
	depends on BT_HCIBTUSB
	select BT_RTL
	default y
	help
	  The Realtek protocol support enables firmware and configuration
	  download support for Realtek Bluetooth controllers.

	  Say Y here to compile support for Realtek protocol.

config BT_HCIBTSDIO
	tristate "HCI SDIO driver"
	depends on MMC
	help
	  Bluetooth HCI SDIO driver.
	  This driver is required if you want to use Bluetooth device with
	  SDIO interface.

	  Say Y here to compile support for Bluetooth SDIO devices into the
	  kernel or say M to compile it as module (btsdio).

config BT_HCIUART
	tristate "HCI UART driver"
	depends on SERIAL_DEV_BUS || !SERIAL_DEV_BUS
	depends on NVMEM || !NVMEM
	depends on TTY
	help
	  Bluetooth HCI UART driver.
	  This driver is required if you want to use Bluetooth devices with
	  serial port interface. You will also need this driver if you have
	  UART based Bluetooth PCMCIA and CF devices like Xircom Credit Card
	  adapter and BrainBoxes Bluetooth PC Card.

	  Say Y here to compile support for Bluetooth UART devices into the
	  kernel or say M to compile it as module (hci_uart).

config BT_HCIUART_SERDEV
	bool
	depends on SERIAL_DEV_BUS && BT_HCIUART
	default y

config BT_HCIUART_H4
	bool "UART (H4) protocol support"
	depends on BT_HCIUART
	help
	  UART (H4) is serial protocol for communication between Bluetooth
	  device and host. This protocol is required for most Bluetooth devices
	  with UART interface, including PCMCIA and CF cards.

	  Say Y here to compile support for HCI UART (H4) protocol.

config BT_HCIUART_NOKIA
	tristate "UART Nokia H4+ protocol support"
	depends on BT_HCIUART
	depends on BT_HCIUART_SERDEV
	depends on GPIOLIB
	depends on PM
	select BT_HCIUART_H4
	select BT_BCM
	help
	  Nokia H4+ is serial protocol for communication between Bluetooth
	  device and host. This protocol is required for Bluetooth devices
	  with UART interface in Nokia devices.

	  Say Y here to compile support for Nokia's H4+ protocol.

config BT_HCIUART_BCSP
	bool "BCSP protocol support"
	depends on BT_HCIUART
	select BITREVERSE
	help
	  BCSP (BlueCore Serial Protocol) is serial protocol for communication
	  between Bluetooth device and host. This protocol is required for non
	  USB Bluetooth devices based on CSR BlueCore chip, including PCMCIA and
	  CF cards.

	  Say Y here to compile support for HCI BCSP protocol.

config BT_HCIUART_ATH3K
	bool "Atheros AR300x serial support"
	depends on BT_HCIUART
	select BT_HCIUART_H4
	help
	  HCIATH3K (HCI Atheros AR300x) is a serial protocol for
	  communication between host and Atheros AR300x Bluetooth devices.
	  This protocol enables AR300x chips to be enabled with
	  power management support.
	  Enable this if you have Atheros AR300x serial Bluetooth device.

	  Say Y here to compile support for HCI UART ATH3K protocol.

config BT_HCIUART_LL
	bool "HCILL protocol support"
	depends on BT_HCIUART_SERDEV
	select BT_HCIUART_H4
	help
	  HCILL (HCI Low Level) is a serial protocol for communication
	  between Bluetooth device and host. This protocol is required for
	  serial Bluetooth devices that are based on Texas Instruments'
	  BRF chips.

	  Say Y here to compile support for HCILL protocol.

config BT_HCIUART_3WIRE
	bool "Three-wire UART (H5) protocol support"
	depends on BT_HCIUART
	depends on BT_HCIUART_SERDEV
	help
	  The HCI Three-wire UART Transport Layer makes it possible to
	  user the Bluetooth HCI over a serial port interface. The HCI
	  Three-wire UART Transport Layer assumes that the UART
	  communication may have bit errors, overrun errors or burst
	  errors and thereby making CTS/RTS lines unnecessary.

	  Say Y here to compile support for Three-wire UART protocol.

config BT_HCIUART_INTEL
	bool "Intel protocol support"
	depends on BT_HCIUART
	depends on GPIOLIB
	select BT_HCIUART_H4
	select BT_INTEL
	help
	  The Intel protocol support enables Bluetooth HCI over serial
	  port interface for Intel Bluetooth controllers.

	  Say Y here to compile support for Intel protocol.

config BT_HCIUART_BCM
	bool "Broadcom protocol support"
	depends on BT_HCIUART
	depends on BT_HCIUART_SERDEV
	depends on (!ACPI || SERIAL_DEV_CTRL_TTYPORT)
	depends on GPIOLIB
	select BT_HCIUART_H4
	select BT_BCM
	help
	  The Broadcom protocol support enables Bluetooth HCI over serial
	  port interface for Broadcom Bluetooth controllers.

	  Say Y here to compile support for Broadcom protocol.

config BT_HCIUART_RTL
	bool "Realtek protocol support"
	depends on BT_HCIUART
	depends on BT_HCIUART_SERDEV
	depends on GPIOLIB
	depends on (ACPI || SERIAL_DEV_CTRL_TTYPORT)
	select BT_HCIUART_3WIRE
	select BT_RTL
	help
	  The Realtek protocol support enables Bluetooth HCI over 3-Wire
	  serial port interface for Realtek Bluetooth controllers.

	  Say Y here to compile support for Realtek protocol.

config BT_HCIUART_QCA
	bool "Qualcomm Atheros protocol support"
	depends on BT_HCIUART
	depends on BT_HCIUART_SERDEV
	select BT_HCIUART_H4
	select BT_QCA
	help
	  The Qualcomm Atheros protocol supports HCI In-Band Sleep feature
	  over serial port interface(H4) between controller and host.
	  This protocol is required for UART clock control for QCA Bluetooth
	  devices.

	  Say Y here to compile support for QCA protocol.

config BT_HCIUART_AG6XX
	bool "Intel AG6XX protocol support"
	depends on BT_HCIUART
	select BT_HCIUART_H4
	select BT_INTEL
	help
	  The Intel/AG6XX protocol support enables Bluetooth HCI over serial
	  port interface for Intel ibt 2.1 Bluetooth controllers.

	  Say Y here to compile support for Intel AG6XX protocol.

config BT_HCIUART_MRVL
	bool "Marvell protocol support"
	depends on BT_HCIUART
	depends on BT_HCIUART_SERDEV
	select BT_HCIUART_H4
	help
	  Marvell is serial protocol for communication between Bluetooth
	  device and host. This protocol is required for most Marvell Bluetooth
	  devices with UART interface.

	  Say Y here to compile support for HCI MRVL protocol.

config BT_HCIBCM203X
	tristate "HCI BCM203x USB driver"
	depends on USB
	select FW_LOADER
	help
	  Bluetooth HCI BCM203x USB driver.
	  This driver provides the firmware loading mechanism for the Broadcom
	  Blutonium based devices.

	  Say Y here to compile support for HCI BCM203x devices into the
	  kernel or say M to compile it as module (bcm203x).

config BT_HCIBPA10X
	tristate "HCI BPA10x USB driver"
	depends on USB
	help
	  Bluetooth HCI BPA10x USB driver.
	  This driver provides support for the Digianswer BPA 100/105 Bluetooth
	  sniffer devices.

	  Say Y here to compile support for HCI BPA10x devices into the
	  kernel or say M to compile it as module (bpa10x).

config BT_HCIBFUSB
	tristate "HCI BlueFRITZ! USB driver"
	depends on USB
	select FW_LOADER
	help
	  Bluetooth HCI BlueFRITZ! USB driver.
	  This driver provides support for Bluetooth USB devices with AVM
	  interface:
	     AVM BlueFRITZ! USB

	  Say Y here to compile support for HCI BFUSB devices into the
	  kernel or say M to compile it as module (bfusb).

config BT_HCIDTL1
	tristate "HCI DTL1 (PC Card) driver"
	depends on PCMCIA
	help
	  Bluetooth HCI DTL1 (PC Card) driver.
	  This driver provides support for Bluetooth PCMCIA devices with
	  Nokia DTL1 interface:
	     Nokia Bluetooth Card
	     Socket Bluetooth CF Card

	  Say Y here to compile support for HCI DTL1 devices into the
	  kernel or say M to compile it as module (dtl1_cs).

config BT_HCIBT3C
	tristate "HCI BT3C (PC Card) driver"
	depends on PCMCIA
	select FW_LOADER
	help
	  Bluetooth HCI BT3C (PC Card) driver.
	  This driver provides support for Bluetooth PCMCIA devices with
	  3Com BT3C interface:
	     3Com Bluetooth Card (3CRWB6096)
	     HP Bluetooth Card

	  Say Y here to compile support for HCI BT3C devices into the
	  kernel or say M to compile it as module (bt3c_cs).

config BT_HCIBLUECARD
	tristate "HCI BlueCard (PC Card) driver"
	depends on PCMCIA
	help
	  Bluetooth HCI BlueCard (PC Card) driver.
	  This driver provides support for Bluetooth PCMCIA devices with
	  Anycom BlueCard interface:
	     Anycom Bluetooth PC Card
	     Anycom Bluetooth CF Card

	  Say Y here to compile support for HCI BlueCard devices into the
	  kernel or say M to compile it as module (bluecard_cs).

config BT_HCIVHCI
	tristate "HCI VHCI (Virtual HCI device) driver"
	help
	  Bluetooth Virtual HCI device driver.
	  This driver is required if you want to use HCI Emulation software.

	  Say Y here to compile support for virtual HCI devices into the
	  kernel or say M to compile it as module (hci_vhci).

config BT_MRVL
	tristate "Marvell Bluetooth driver support"
	help
	  The core driver to support Marvell Bluetooth devices.

	  This driver is required if you want to support
	  Marvell Bluetooth devices, such as 8688/8787/8797/8887/8897/8977/8987/8997.

	  Say Y here to compile Marvell Bluetooth driver
	  into the kernel or say M to compile it as module.

config BT_MRVL_SDIO
	tristate "Marvell BT-over-SDIO driver"
	depends on BT_MRVL && MMC
	select FW_LOADER
	select WANT_DEV_COREDUMP
	help
	  The driver for Marvell Bluetooth chipsets with SDIO interface.

	  This driver is required if you want to use Marvell Bluetooth
	  devices with SDIO interface. Currently SD8688/SD8787/SD8797/SD8887/SD8897/SD8977/SD8987/SD8997
	  chipsets are supported.

	  Say Y here to compile support for Marvell BT-over-SDIO driver
	  into the kernel or say M to compile it as module.

config BT_ATH3K
	tristate "Atheros firmware download driver"
	depends on BT_HCIBTUSB
	select FW_LOADER
	help
	  Bluetooth firmware download driver.
	  This driver loads the firmware into the Atheros Bluetooth
	  chipset.

	  Say Y here to compile support for "Atheros firmware download driver"
	  into the kernel or say M to compile it as module (ath3k).

config BT_MTKSDIO
	tristate "MediaTek HCI SDIO driver"
	depends on MMC
	help
	  MediaTek Bluetooth HCI SDIO driver.
	  This driver is required if you want to use MediaTek Bluetooth
	  with SDIO interface.

	  Say Y here to compile support for MediaTek Bluetooth SDIO devices
	  into the kernel or say M to compile it as module (btmtksdio).

config BT_MTKUART
	tristate "MediaTek HCI UART driver"
	depends on SERIAL_DEV_BUS
	help
	  MediaTek Bluetooth HCI UART driver.
	  This driver is required if you want to use MediaTek Bluetooth
	  with serial interface.

	  Say Y here to compile support for MediaTek Bluetooth UART devices
	  into the kernel or say M to compile it as module (btmtkuart).

config BT_QCOMSMD
	tristate "Qualcomm SMD based HCI support"
	depends on RPMSG || (COMPILE_TEST && RPMSG=n)
	depends on QCOM_WCNSS_CTRL || (COMPILE_TEST && QCOM_WCNSS_CTRL=n)
	select BT_QCA
	help
	  Qualcomm SMD based HCI driver.
	  This driver is used to bridge HCI data onto the shared memory
	  channels to the WCNSS core.

	  Say Y here to compile support for HCI over Qualcomm SMD into the
	  kernel or say M to compile as a module.

config BT_HCIRSI
	tristate
	help
	  Redpine BT driver.
	  This driver handles BT traffic from upper layers and pass
	  to the RSI_91x coex module for further scheduling to device

	  Say Y here to compile support for HCI over Redpine into the
	  kernel or say M to compile as a module.

config BT_VIRTIO
	tristate "Virtio Bluetooth driver"
	depends on VIRTIO
	help
	  Virtio Bluetooth support driver.
	  This driver supports Virtio Bluetooth devices.

	  Say Y here to compile support for HCI over Virtio into the
	  kernel or say M to compile as a module.

endmenu
