#
# For a description of the syntax of this configuration file,
# see the file kconfig-language.txt in the NuttX tools repository.
#

config DISABLE_POLL
	bool "Disable driver poll interfaces"
	default n
	---help---
		The sizes of drivers can be reduced if the poll() method is not
		supported.  If you do not use poll() or select(), then you can
		select DISABLE_POLL to reduce the code footprint by a small amount.

		This selection disables the poll() interface as well as interfaces
		the derive from poll() such as select().

config DEV_NULL
	bool "Enable /dev/null"
	default y

config DEV_ZERO
	bool "Enable /dev/zero"
	default n

config ARCH_HAVE_RNG
	bool

config DEV_RANDOM
	bool "Enable /dev/random"
	default n
	depends on ARCH_HAVE_RNG

source drivers/loop/Kconfig

menu "Buffering"

config DRVR_WRITEBUFFER
	bool "Enable write buffer support"
	default n
	---help---
		Enable generic write buffering support that can be used by a variety
		of drivers.

if DRVR_WRITEBUFFER

config DRVR_WRDELAY
	int "Write flush delay"
	default 350
	---help---
		If there is no write activity for this configured amount of time,
		then the contents will be automatically flushed to the media.  This
		reduces the likelihood that data will be stuck in the write buffer
		at the time of power down.

endif # DRVR_WRITEBUFFER

config DRVR_READAHEAD
	bool "Enable read-ahead buffer support"
	default n
	---help---
		Enable generic read-ahead buffering support that can be used by a
		variety of drivers.

if DRVR_WRITEBUFFER || DRVR_READAHEAD

config DRVR_READBYTES
	bool "Support byte read method"
	default y if MTD_BYTE_WRITE
	default n if !MTD_BYTE_WRITE

config DRVR_REMOVABLE
	bool "Support removable media"
	default n

config DRVR_INVALIDATE
	bool "Support cache invalidation"
	default n

endif # DRVR_WRITEBUFFER || DRVR_READAHEAD

endmenu # Buffering

config RAMDISK
	bool "RAM Disk Support"
	default n
	---help---
		Can be used to set up a block of memory or (read-only) FLASH as
		a block driver that can be mounted as a files system.  See
		include/nuttx/fs/ramdisk.h.

menuconfig CAN
	bool "CAN Driver Support"
	default n
	---help---
		This selection enables building of the "upper-half" CAN driver.
		See include/nuttx/can.h for further CAN driver information.

if CAN

config CAN_EXTID
	bool "CAN extended IDs"
	default n
	---help---
		Enables support for the 28-bit extended ID.  Default Standard 11-bit
		IDs.

config ARCH_HAVE_CAN_ERRORS
	bool
	default n

config CAN_ERRORS
	bool "CAN error reporting"
	default n
	depends on ARCH_HAVE_CAN_ERRORS
	---help---
		Support CAN error reporting.  If this option is selected then CAN
		error reporting is enabled.  In the event of an error, the ch_error
		bit will be set in the CAN message and the following message payload
		will include a more detailed description of certain errors.

config CAN_FD
	bool "CAN FD"
	default n
	---help---
		Enables support for the CAN_FD mode.

config CAN_FIFOSIZE
	int "CAN driver I/O buffer size"
	default 8
	---help---
		The size of the circular buffer of CAN messages. Default: 8

config CAN_NPENDINGRTR
	int "Number of pending RTRs"
	default 4
	---help---
		The size of the list of pending RTR requests. Default: 4

config CAN_TXREADY
	bool "can_txready interface"
	default n
	select SCHED_WORKQUEUE
	---help---
		This selection enables the can_txready() interface.  This interface
		is needed only for CAN hardware that supports queing of outgoing
		messages in a H/W FIFO.

		The CAN upper half driver also supports a queue of output messages
		in a S/W FIFO.  Messages are added to that queue when when
		can_write() is called and removed from the queue in can_txdone()
		when each TX message is complete.

		After each message is added to the S/W FIFO, the CAN upper half
		driver will attempt to send the message by calling into the lower
		half driver.  That send will not be performed if the lower half
		driver is busy, i.e., if dev_txready() returns false.  In that
		case, the number of messages in the S/W FIFO can grow.  If the
		S/W FIFO becomes full, then can_write() will wait for space in
		the S/W FIFO.

		If the CAN hardware does not support a H/W FIFO then busy means
		that the hardware is actively sending the message and is
		guaranteed to become non busy (i.e, dev_txready()) when the
		send transfer completes and can_txdone() is called.  So the call
		to can_txdone() means that the transfer has completed and also
		that the hardware is ready to accept another transfer.

		If the CAN hardware supports a H/W FIFO, can_txdone() is not
		called when the tranfer is complete, but rather when the
		transfer is queued in the H/W FIFO.  When the H/W FIFO becomes
		full, then dev_txready() will report false and the number of
		queued messages in the S/W FIFO will grow.

		There is no mechanism in this case to inform the upper half
		driver when the hardware is again available, when there is
		again space in the H/W FIFO.  can_txdone() will not be called
		again.  If the S/W FIFO becomes full, then the upper half
		driver will wait for space to become available, but there is
		no event to awaken it and the driver will hang.

		Enabling this feature adds support for the can_txready()
		interface.  This function is called from the lower half
		driver's CAN interrupt handler each time a TX transfer
		completes.  This is a sure indication that the H/W FIFO is
		no longer full.  can_txready() will then awaken the
		can_write() logic and the hang condition is avoided.

choice
	prompt "TX Ready Work Queue"
	default CAN_TXREADY_HIPRI
	depends on CAN_TXREADY

config CAN_TXREADY_LOPRI
	bool "Low-priority work queue"
	select SCHED_LPWORK

config CAN_TXREADY_HIPRI
	bool "High-priority work queue"
	select SCHED_HPWORK

endchoice # TX Ready Work Queue

config CAN_LOOPBACK
	bool "CAN loopback mode"
	default n
	---help---
		A CAN driver may or may not support a loopback mode for testing. If the
		driver does support loopback mode, the setting will enable it. (If the
		driver does not, this setting will have no effect).

endif # CAN

config ARCH_HAVE_PWM_PULSECOUNT
	bool
	default n

config ARCH_HAVE_PWM_MULTICHAN
	bool
	default n

menuconfig PWM
	bool "PWM Driver Support"
	default n
	---help---
		This selection enables building of the "upper-half" PWM driver.
		See include/nuttx/pwm.h for further PWM driver information.

if PWM

config PWM_PULSECOUNT
	bool "PWM Pulse Count Support"
	default n
	depends on ARCH_HAVE_PWM_PULSECOUNT
	---help---
		Some hardware will support generation of a fixed number of pulses.
		This might be used, for example to support a stepper motor.  If the
		hardware will support a fixed pulse count, then this configuration
		should be set to enable the capability.

config PWM_MULTICHAN
	bool "PWM Multiple Output Channel Support"
	default n
	depends on ARCH_HAVE_PWM_MULTICHAN
	depends on !PWM_PULSECOUNT
	---help---
		Enables support for multiple output channels per timer.

if PWM_MULTICHAN

config PWM_NCHANNELS
	int "Number of Output Channels Per Timer"
	default 1
	range 1 4
	---help---
		Specifies the number of output channels per timer.  Each timer
		may support fewer output channels than this value.

endif # PWM_MULTICHAN

endif # PWM

config ARCH_HAVE_I2CRESET
	bool
	default n

menuconfig I2C
	bool "I2C Driver Support"
	default n
	---help---
		This selection enables building of the "upper-half" I2C driver.
		See include/nuttx/i2c/i2c_master.h for further I2C driver information.

if I2C
source drivers/i2c/Kconfig
endif

menuconfig SPI
	bool "SPI Driver Support"
	default n
	---help---
		This selection enables selection of common SPI options.  This option
		should be enabled by all platforms that support SPI interfaces.
		See include/nuttx/spi/spi.h for further SPI driver information.

if SPI
source drivers/spi/Kconfig
endif

menuconfig I2S
	bool "I2S Driver Support"
	default n
	---help---
		This selection enables selection of common I2S options.  This option
		should be enabled by all platforms that support I2S interfaces.
		See include/nuttx/audio/i2s.h for further I2S driver information.

if I2S
endif # I2S

source drivers/timers/Kconfig

menuconfig ANALOG
	bool "Analog Device(ADC/DAC) Support"
	default n
	---help---
		This directory holds implementations of analog device drivers.
		This includes drivers for Analog to Digital Conversion (ADC) as
		well as drivers for Digital to Analog Conversion (DAC).
		See include/nuttx/analog/*.h for registration information.

if ANALOG
source drivers/analog/Kconfig
endif # ANALOG

menuconfig AUDIO_DEVICES
	bool "Audio Device Support"
	default n
	---help---
		Enable support for audio device drivers.  This includes drivers for
		MP3, WMA and Ogg Vorbis encoding, decoding, as well as drivers for
		interfacing with external DSP chips to perform custom audio functions.

		NOTE: All of these drivers depend on support from the audio subsystem
		enabled with the AUDIO selection.

if AUDIO_DEVICES
source drivers/audio/Kconfig
endif # AUDIO_DEVICES

menuconfig VIDEO_DEVICES
	bool "Video Device Support"
	default n
	---help---
		Enable support for video device drivers.

if VIDEO_DEVICES
source drivers/video/Kconfig
endif # VIDEO_DEVICES

menuconfig BCH
	bool "Block-to-Character (BCH) Support"
	default n
	---help---
		Contains logic that may be used to convert a block driver into
		a character driver.  This is the complementary conversion as that
		performed by loop.c.  See include/nuttx/fs/fs.h for registration
		information.

if BCH
source drivers/bch/Kconfig
endif # BCH

menuconfig INPUT
	bool "Input Device Support"
	default n
	---help---
		This directory holds implementations of input device drivers.
		This includes such things as touchscreen and keypad drivers.
		See include/nuttx/input/*.h for registration information.

if INPUT
source drivers/input/Kconfig
endif # INPUT

menuconfig IOEXPANDER
	bool "IO Expander Support"
	default n
	---help---
		This directory holds implementations of IO expander drivers.
		See include/nuttx/ioexpander/ioexpander.h for registration information.

if IOEXPANDER
source drivers/ioexpander/Kconfig
endif # IOEXPANDER

menuconfig LCD
	bool "LCD Driver Support"
	default n
	select NX_LCDDRIVER
	---help---
		Drivers for parallel and serial LCD and OLED type devices.  These
		drivers support interfaces as defined in include/nuttx/lcd/lcd.h

		This selection is necessary to enable support for LCD drivers in
		drivers/lcd as well as for board-specific LCD drivers in the configs/
		subdirectories.

if LCD
source drivers/lcd/Kconfig
endif # LCD

source drivers/leds/Kconfig

menuconfig MMCSD
	bool "MMC/SD Driver Support"
	default n
	---help---
		Support for MMC/SD block drivers.  MMC/SD block drivers based on
		SPI and SDIO/MCI interfaces are supported.  See include/nuttx/mmcsd.h
		and include/nuttx/sdio.h for further information.

if MMCSD
source drivers/mmcsd/Kconfig
endif # MMCSD

menuconfig MODEM
	bool "Modem Support"
	default n
	---help---
		Enable modem support.

if MODEM
source drivers/modem/Kconfig
endif # MODEM

menuconfig MTD
	bool "Memory Technology Device (MTD) Support"
	default n
	---help---
		Memory Technology Device (MTD) drivers.  Some simple drivers for
		memory technologies like FLASH, EEPROM, NVRAM, etc.  See
		include/nuttx/mtd/mtd.h

		(Note: This is a simple memory interface and should not be
		confused with the "real" MTD developed at infradead.org.  This
		logic is unrelated; I just used the name MTD because I am not
		aware of any other common way to refer to this class of devices).

if MTD
source drivers/mtd/Kconfig
endif # MTD

menuconfig EEPROM
	bool "EEPROM support"
	default n
	---help---
		This directory holds implementations of EEPROM drivers.

if EEPROM
source drivers/eeprom/Kconfig
endif

menuconfig NETDEVICES
	bool "Network Device/PHY Support"
	default n if !ARCH_HAVE_PHY
	default y if ARCH_HAVE_PHY
	depends on NET
	---help---
		Network interface driver and PHY selections.  This options enables
		selection of drivers for external Ethernet MAC chips.  The majority
		of MCUs, however, have built-in, internal Ethernet MAC peripherals
		and that Ethernet support is selected in the MCU-specific
		configuration menus.

		Most Ethernet MAC drivers, whether internal or external, will
		require configuration of an external PHY device.  That external PHY
		device is also selected via this menu.

if NETDEVICES
source drivers/net/Kconfig
endif # NETDEVICES

menuconfig PIPES
	bool "FIFO and named pipe drivers"
	default n
	---help---
		FIFO and named pipe drivers.  Standard interfaces are declared
		in include/unistd.h

if PIPES
source drivers/pipes/Kconfig
endif # PIPES

config PM
	bool "Power management (PM) driver interfaces"
	default n
	---help---
		Power management (PM) driver interfaces.  These interfaces are used
		to manage power usage of a platform by monitoring driver activity
		and by placing drivers into reduce power usage modes when the
		drivers are not active.

menuconfig POWER
	bool "Power Management Support"
	default n
	---help---
		Enable building of power-related devices (battery monitors, chargers,
		etc).

if POWER
source drivers/power/Kconfig
endif # POWER

menuconfig SENSORS
	bool "Sensor Device Support"
	default n
	---help---
		Drivers for various sensors

if SENSORS
source drivers/sensors/Kconfig
endif # SENSORS

menuconfig SERCOMM_CONSOLE
	bool "Osmocom-bb Sercomm Driver Support"
	default n
	---help---
		Sercomm is the transport used by osmocom-bb that runs on top of serial.
		See http://bb.osmocom.org/trac/wiki/nuttx-bb/run for detailed the usage
		of nuttx with sercomm.

		drivers/sercomm is only built if SERCOMM_CONSOLE in the NuttX
		configuration file.  If you attempt to build this driver without
		osmocom-bb, you will get compilation errors because of header files
		that are needed from the osmocom-bb.

if SERCOMM_CONSOLE
source drivers/sercomm/Kconfig
endif # SERCOMM_CONSOLE

menuconfig SERIAL
	bool "Serial Driver Support"
	default y
	---help---
		Front-end character drivers for chip-specific UARTs.  This provide
		some TTY-like functionality and are commonly used (but not required
		for) the NuttX system console.  See also include/nuttx/serial/serial.h

if SERIAL
source drivers/serial/Kconfig
endif # SERIAL

menuconfig USBDEV
	bool "USB Device Driver Support"
	default n
	---help---
		USB device drivers.  See also include/nuttx/usb/usbdev.h

if USBDEV
source drivers/usbdev/Kconfig
endif # USBDEV

menuconfig USBHOST
	bool "USB Host Driver Support"
	default n
	---help---
		USB host drivers.  See also include/nuttx/usb/usbhost.h

if USBHOST
source drivers/usbhost/Kconfig
endif # USBHOST

menuconfig WIRELESS
	bool "Wireless Device Support"
	default n
	---help---
		Drivers for various wireless devices.

if WIRELESS
source drivers/wireless/Kconfig
endif # WIRELESS

comment "System Logging Device Options"

source drivers/syslog/Kconfig
