#
# Bluetooth subsystem configuration
#

menuconfig BT
	tristate "Bluetooth subsystem support"
	depends on NET && !S390
	depends on RFKILL || !RFKILL
	select CRC16
	select CRYPTO
	select CRYPTO_BLKCIPHER
	select CRYPTO_AES
	select CRYPTO_CMAC
	select CRYPTO_ECB
	select CRYPTO_SHA256
	select CRYPTO_ECDH
	help
	  Bluetooth is low-cost, low-power, short-range wireless technology.
	  It was designed as a replacement for cables and other short-range
	  technologies like IrDA.  Bluetooth operates in personal area range
	  that typically extends up to 10 meters.  More information about
	  Bluetooth can be found at <http://www.bluetooth.com/>.

	  Linux Bluetooth subsystem consist of several layers:
	     Bluetooth Core
		HCI device and connection manager, scheduler
		SCO audio links
		L2CAP (Logical Link Control and Adaptation Protocol)
		SMP (Security Manager Protocol) on LE (Low Energy) links
	     HCI Device drivers (Interface to the hardware)
	     RFCOMM Module (RFCOMM Protocol)  
	     BNEP Module (Bluetooth Network Encapsulation Protocol)
	     CMTP Module (CAPI Message Transport Protocol)
	     HIDP Module (Human Interface Device Protocol)

	  Say Y here to compile Bluetooth support into the kernel or say M to
	  compile it as module (bluetooth).

	  To use Linux Bluetooth subsystem, you will need several user-space
	  utilities like hciconfig and bluetoothd.  These utilities and updates
	  to Bluetooth kernel modules are provided in the BlueZ packages.  For
	  more information, see <http://www.bluez.org/>.

config BT_BREDR
	bool "Bluetooth Classic (BR/EDR) features"
	depends on BT
	default y

source "net/bluetooth/rfcomm/Kconfig"

source "net/bluetooth/bnep/Kconfig"

source "net/bluetooth/cmtp/Kconfig"

source "net/bluetooth/hidp/Kconfig"

config BT_HS
	bool "Bluetooth High Speed (HS) features"
	depends on BT_BREDR
	default y

config BT_LE
	bool "Bluetooth Low Energy (LE) features"
	depends on BT
	default y

config BT_6LOWPAN
	tristate "Bluetooth 6LoWPAN support"
	depends on BT_LE && 6LOWPAN
	help
	  IPv6 compression over Bluetooth Low Energy.

config BT_LEDS
	bool "Enable LED triggers"
	depends on BT
	depends on LEDS_CLASS
	select LEDS_TRIGGERS
	help
	  This option selects a few LED triggers for different
	  Bluetooth events.

config BT_SELFTEST
	bool "Bluetooth self testing support"
	depends on BT && DEBUG_KERNEL
	help
	  Run self tests when initializing the Bluetooth subsystem.  This
	  is a developer option and can cause significant delay when booting
	  the system.

	  When the Bluetooth subsystem is built as module, then the test
	  cases are run first thing at module load time.  When the Bluetooth
	  subsystem is compiled into the kernel image, then the test cases
	  are run late in the initcall hierarchy.

config BT_SELFTEST_ECDH
	bool "ECDH test cases"
	depends on BT_LE && BT_SELFTEST
	help
	  Run test cases for ECDH cryptographic functionality used by the
	  Bluetooth Low Energy Secure Connections feature.

config BT_SELFTEST_SMP
	bool "SMP test cases"
	depends on BT_LE && BT_SELFTEST
	help
	  Run test cases for SMP cryptographic functionality, including both
	  legacy SMP as well as the Secure Connections features.

config BT_DEBUGFS
	bool "Export Bluetooth internals in debugfs"
	depends on BT && DEBUG_FS
	default y
	help
	  Provide extensive information about internal Bluetooth states
	  in debugfs.

source "drivers/bluetooth/Kconfig"
