# SPDX-License-Identifier: GPL-2.0-only
menu "CAN Device Drivers"

config CAN_VCAN
	tristate "Virtual Local CAN Interface (vcan)"
	help
	  Similar to the network loopback devices, vcan offers a
	  virtual local CAN interface.

	  This driver can also be built as a module.  If so, the module
	  will be called vcan.

config CAN_VXCAN
	tristate "Virtual CAN Tunnel (vxcan)"
	help
	  Similar to the virtual ethernet driver veth, vxcan implements a
	  local CAN traffic tunnel between two virtual CAN network devices.
	  When creating a vxcan, two vxcan devices are created as pair.
	  When one end receives the packet it appears on its pair and vice
	  versa. The vxcan can be used for cross namespace communication.

	  In opposite to vcan loopback devices the vxcan only forwards CAN
	  frames to its pair and does *not* provide a local echo of sent
	  CAN frames. To disable a potential echo in af_can.c the vxcan driver
	  announces IFF_ECHO in the interface flags. To have a clean start
	  in each namespace the CAN GW hop counter is set to zero.

	  This driver can also be built as a module.  If so, the module
	  will be called vxcan.

config CAN_SLCAN
	tristate "Serial / USB serial CAN Adaptors (slcan)"
	depends on TTY
	help
	  CAN driver for several 'low cost' CAN interfaces that are attached
	  via serial lines or via USB-to-serial adapters using the LAWICEL
	  ASCII protocol. The driver implements the tty linediscipline N_SLCAN.

	  As only the sending and receiving of CAN frames is implemented, this
	  driver should work with the (serial/USB) CAN hardware from:
	  www.canusb.com / www.can232.com / www.mictronics.de / www.canhack.de

	  Userspace tools to attach the SLCAN line discipline (slcan_attach,
	  slcand) can be found in the can-utils at the linux-can project, see
	  https://github.com/linux-can/can-utils for details.

	  The slcan driver supports up to 10 CAN netdevices by default which
	  can be changed by the 'maxdev=xx' module option. This driver can
	  also be built as a module. If so, the module will be called slcan.

config CAN_DEV
	tristate "Platform CAN drivers with Netlink support"
	default y
	help
	  Enables the common framework for platform CAN drivers with Netlink
	  support. This is the standard library for CAN drivers.
	  If unsure, say Y.

if CAN_DEV

config CAN_CALC_BITTIMING
	bool "CAN bit-timing calculation"
	default y
	help
	  If enabled, CAN bit-timing parameters will be calculated for the
	  bit-rate specified via Netlink argument "bitrate" when the device
	  get started. This works fine for the most common CAN controllers
	  with standard bit-rates but may fail for exotic bit-rates or CAN
	  source clock frequencies. Disabling saves some space, but then the
	  bit-timing parameters must be specified directly using the Netlink
	  arguments "tq", "prop_seg", "phase_seg1", "phase_seg2" and "sjw".
	  If unsure, say Y.

config CAN_LEDS
	bool "Enable LED triggers for Netlink based drivers"
	depends on LEDS_CLASS
	# The netdev trigger (LEDS_TRIGGER_NETDEV) should be able to do
	# everything that this driver is doing. This is marked as broken
	# because it uses stuff that is intended to be changed or removed.
	# Please consider switching to the netdev trigger and confirm it
	# fulfills your needs instead of fixing this driver.
	depends on BROKEN
	select LEDS_TRIGGERS
	help
	  This option adds two LED triggers for packet receive and transmit
	  events on each supported CAN device.

	  Say Y here if you are working on a system with led-class supported
	  LEDs and you want to use them as canbus activity indicators.

config CAN_AT91
	tristate "Atmel AT91 onchip CAN controller"
	depends on (ARCH_AT91 || COMPILE_TEST) && HAS_IOMEM
	help
	  This is a driver for the SoC CAN controller in Atmel's AT91SAM9263
	  and AT91SAM9X5 processors.

config CAN_FLEXCAN
	tristate "Support for Freescale FLEXCAN based chips"
	depends on OF && HAS_IOMEM
	help
	  Say Y here if you want to support for Freescale FlexCAN.

config CAN_GRCAN
	tristate "Aeroflex Gaisler GRCAN and GRHCAN CAN devices"
	depends on OF && HAS_DMA
	help
	  Say Y here if you want to use Aeroflex Gaisler GRCAN or GRHCAN.
	  Note that the driver supports little endian, even though little
	  endian syntheses of the cores would need some modifications on
	  the hardware level to work.

config CAN_JANZ_ICAN3
	tristate "Janz VMOD-ICAN3 Intelligent CAN controller"
	depends on MFD_JANZ_CMODIO
	help
	  Driver for Janz VMOD-ICAN3 Intelligent CAN controller module, which
	  connects to a MODULbus carrier board.

	  This driver can also be built as a module. If so, the module will be
	  called janz-ican3.ko.

config CAN_KVASER_PCIEFD
	depends on PCI
	tristate "Kvaser PCIe FD cards"
	  help
	  This is a driver for the Kvaser PCI Express CAN FD family.

	  Supported devices:
	    Kvaser PCIEcan 4xHS
	    Kvaser PCIEcan 2xHS v2
	    Kvaser PCIEcan HS v2
	    Kvaser Mini PCI Express HS v2
	    Kvaser Mini PCI Express 2xHS v2

config CAN_SUN4I
	tristate "Allwinner A10 CAN controller"
	depends on MACH_SUN4I || MACH_SUN7I || COMPILE_TEST
	help
	  Say Y here if you want to use CAN controller found on Allwinner
	  A10/A20 SoCs.

	  To compile this driver as a module, choose M here: the module will
	  be called sun4i_can.

config CAN_TI_HECC
	depends on ARM
	tristate "TI High End CAN Controller"
	help
	  Driver for TI HECC (High End CAN Controller) module found on many
	  TI devices. The device specifications are available from www.ti.com

config CAN_XILINXCAN
	tristate "Xilinx CAN"
	depends on ARCH_ZYNQ || ARM64 || MICROBLAZE || COMPILE_TEST
	depends on COMMON_CLK && HAS_IOMEM
	help
	  Xilinx CAN driver. This driver supports both soft AXI CAN IP and
	  Zynq CANPS IP.

config PCH_CAN
	tristate "Intel EG20T PCH CAN controller"
	depends on PCI && (X86_32 || COMPILE_TEST)
	help
	  This driver is for PCH CAN of Topcliff (Intel EG20T PCH) which
	  is an IOH for x86 embedded processor (Intel Atom E6xx series).
	  This driver can access CAN bus.

source "drivers/net/can/c_can/Kconfig"
source "drivers/net/can/cc770/Kconfig"
source "drivers/net/can/ifi_canfd/Kconfig"
source "drivers/net/can/m_can/Kconfig"
source "drivers/net/can/mscan/Kconfig"
source "drivers/net/can/peak_canfd/Kconfig"
source "drivers/net/can/rcar/Kconfig"
source "drivers/net/can/sja1000/Kconfig"
source "drivers/net/can/softing/Kconfig"
source "drivers/net/can/spi/Kconfig"
source "drivers/net/can/usb/Kconfig"

endif

config CAN_DEBUG_DEVICES
	bool "CAN devices debugging messages"
	help
	  Say Y here if you want the CAN device drivers to produce a bunch of
	  debug messages to the system log.  Select this if you are having
	  a problem with CAN support and want to see more of what is going
	  on.

endmenu
