# SPDX-License-Identifier: GPL-2.0-only
menu "CAN USB interfaces"
	depends on USB

config CAN_8DEV_USB
	tristate "8 devices USB2CAN interface"
	help
	  This driver supports the USB2CAN interface
	  from 8 devices (http://www.8devices.com).

config CAN_EMS_USB
	tristate "EMS CPC-USB/ARM7 CAN/USB interface"
	help
	  This driver is for the one channel CPC-USB/ARM7 CAN/USB interface
	  from EMS Dr. Thomas Wuensche (http://www.ems-wuensche.de).

config CAN_ESD_USB
	tristate "esd electronics gmbh CAN/USB interfaces"
	help
	  This driver adds supports for several CAN/USB interfaces
	  from esd electronics gmbh (https://www.esd.eu).

	  The drivers supports the following devices:
	    - esd CAN-USB/2
	    - esd CAN-USB/Micro

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

config CAN_ETAS_ES58X
	tristate "ETAS ES58X CAN/USB interfaces"
	select CRC16
	select NET_DEVLINK
	help
	  This driver supports the ES581.4, ES582.1 and ES584.1 interfaces
	  from ETAS GmbH (https://www.etas.com/en/products/es58x.php).

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

config CAN_F81604
        tristate "Fintek F81604 USB to 2CAN interface"
        help
          This driver supports the Fintek F81604 USB to 2CAN interface.
          The device can support CAN2.0A/B protocol and also support
          2 output pins to control external terminator (optional).

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

          (see also https://www.fintek.com.tw).

config CAN_GS_USB
	tristate "Geschwister Schneider UG and candleLight compatible interfaces"
	select CAN_RX_OFFLOAD
	help
	  This driver supports the Geschwister Schneider and
	  bytewerk.org candleLight compatible
	  (https://github.com/candle-usb/candleLight_fw) USB/CAN
	  interfaces.

	  If unsure choose N,
	  choose Y for built in support,
	  M to compile as module (module will be named: gs_usb).

config CAN_KVASER_USB
	tristate "Kvaser CAN/USB interface"
	help
	  This driver adds support for Kvaser CAN/USB devices like Kvaser
	  Leaf Light, Kvaser USBcan II and Kvaser Memorator Pro 5xHS.

	  The driver provides support for the following devices:
	    - Kvaser Leaf Light
	    - Kvaser Leaf Professional HS
	    - Kvaser Leaf SemiPro HS
	    - Kvaser Leaf Professional LS
	    - Kvaser Leaf Professional SWC
	    - Kvaser Leaf Professional LIN
	    - Kvaser Leaf SemiPro LS
	    - Kvaser Leaf SemiPro SWC
	    - Kvaser Memorator II HS/HS
	    - Kvaser USBcan Professional HS/HS
	    - Kvaser Leaf Light GI
	    - Kvaser Leaf Professional HS (OBD-II connector)
	    - Kvaser Memorator Professional HS/LS
	    - Kvaser Leaf Light "China"
	    - Kvaser BlackBird SemiPro
	    - Kvaser USBcan R
	    - Kvaser USBcan R v2
	    - Kvaser Leaf Light v2
	    - Kvaser Leaf Light R v2
	    - Kvaser Mini PCI Express HS
	    - Kvaser Mini PCI Express 2xHS
	    - Kvaser USBcan Light 2xHS
	    - Kvaser USBcan II HS/HS
	    - Kvaser USBcan II HS/LS
	    - Kvaser USBcan Rugged ("USBcan Rev B")
	    - Kvaser Memorator HS/HS
	    - Kvaser Memorator HS/LS
	    - Scania VCI2 (if you have the Kvaser logo on top)
	    - Kvaser BlackBird v2
	    - Kvaser Leaf Pro HS v2
	    - Kvaser Leaf v3
	    - Kvaser Hybrid CAN/LIN
	    - Kvaser Hybrid 2xCAN/LIN
	    - Kvaser Hybrid Pro CAN/LIN
	    - Kvaser Hybrid Pro 2xCAN/LIN
	    - Kvaser Memorator 2xHS v2
	    - Kvaser Memorator Pro 2xHS v2
	    - Kvaser Memorator Pro 5xHS
	    - Kvaser USBcan Light 4xHS
	    - Kvaser USBcan Pro 2xHS v2
	    - Kvaser USBcan Pro 4xHS
	    - Kvaser USBcan Pro 5xHS
	    - Kvaser U100
	    - Kvaser U100P
	    - Kvaser U100S
	    - ATI Memorator Pro 2xHS v2
	    - ATI USBcan Pro 2xHS v2

	  If unsure, say N.

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

config CAN_MCBA_USB
	tristate "Microchip CAN BUS Analyzer interface"
	help
	  This driver supports the CAN BUS Analyzer interface
	  from Microchip (http://www.microchip.com/development-tools/).

config CAN_PEAK_USB
	tristate "PEAK PCAN-USB/USB Pro interfaces for CAN 2.0b/CAN-FD"
	help
	  This driver supports the PEAK-System Technik USB adapters that enable
	  access to the CAN bus, with respect to the CAN 2.0b and/or CAN-FD
	  standards, that is:

	  PCAN-USB             single CAN 2.0b channel USB adapter
	  PCAN-USB Pro         dual CAN 2.0b channels USB adapter
	  PCAN-USB FD          single CAN-FD channel USB adapter
	  PCAN-USB Pro FD      dual CAN-FD channels USB adapter
	  PCAN-Chip USB        CAN-FD to USB stamp module
	  PCAN-USB X6          6 CAN-FD channels USB adapter

	  (see also http://www.peak-system.com).

config CAN_UCAN
	tristate "Theobroma Systems UCAN interface"
	help
	  This driver supports the Theobroma Systems
	  UCAN USB-CAN interface.

	  The UCAN driver supports the microcontroller-based USB/CAN
	  adapters from Theobroma Systems. There are two form-factors
	  that run essentially the same firmware:

	  * Seal: standalone USB stick
	          https://www.theobroma-systems.com/seal)
	  * Mule: integrated on the PCB of various System-on-Modules
	          from Theobroma Systems like the A31-µQ7 and the RK3399-Q7
	          (https://www.theobroma-systems.com/rk3399-q7)

endmenu
