# SPDX-License-Identifier: GPL-2.0-only
#
# CAIF physical drivers
#

menuconfig CAIF_DRIVERS
	bool "CAIF transport drivers"
	depends on CAIF
	help
	  Enable this to see CAIF physical drivers.

if CAIF_DRIVERS

config CAIF_TTY
	tristate "CAIF TTY transport driver"
	depends on CAIF && TTY
	default n
	---help---
	  The CAIF TTY transport driver is a Line Discipline (ldisc)
	  identified as N_CAIF. When this ldisc is opened from user space
	  it will redirect the TTY's traffic into the CAIF stack.

config CAIF_SPI_SLAVE
	tristate "CAIF SPI transport driver for slave interface"
	depends on CAIF && HAS_DMA
	default n
	---help---
	  The CAIF Link layer SPI Protocol driver for Slave SPI interface.
	  This driver implements a platform driver to accommodate for a
	  platform specific SPI device. A sample CAIF SPI Platform device is
	  provided in <file:Documentation/networking/caif/spi_porting.txt>.

config CAIF_SPI_SYNC
	bool "Next command and length in start of frame"
	depends on CAIF_SPI_SLAVE
	default n
	---help---
	  Putting the next command and length in the start of the frame can
	  help to synchronize to the next transfer in case of over or under-runs.
	  This option also needs to be enabled on the modem.

config CAIF_HSI
	tristate "CAIF HSI transport driver"
	depends on CAIF
	default n
	---help---
	  The CAIF low level driver for CAIF over HSI.
	  Be aware that if you enable this then you also need to
	  enable a low-level HSI driver.

config CAIF_VIRTIO
	tristate "CAIF virtio transport driver"
	depends on CAIF && HAS_DMA
	select VHOST_RING
	select VIRTIO
	select GENERIC_ALLOCATOR
	default n
	---help---
	  The CAIF driver for CAIF over Virtio.

if CAIF_VIRTIO
source "drivers/vhost/Kconfig.vringh"
endif

endif # CAIF_DRIVERS
