# CAN configuration options

# Copyright (c) 2018 Alexander Wachter
# SPDX-License-Identifier: Apache-2.0

#
# CAN options
#
menuconfig CAN
	bool "Controller Area Network (CAN) drivers"
	help
	  Enable CAN Driver Configuration

if CAN

module = CAN
module-str = CAN
source "subsys/logging/Kconfig.template.log_config"

config CAN_INIT_PRIORITY
	int "CAN driver init priority"
	default KERNEL_INIT_PRIORITY_DEVICE
	help
	  CAN driver device initialization priority.

config CAN_SHELL
	bool "CAN shell"
	default y
	depends on SHELL
	select POLL
	help
	  Enable CAN Shell for testing.

if CAN_SHELL

config CAN_SHELL_TX_QUEUE_SIZE
	int "CAN shell transmit queue size"
	default 5
	range 1 256
	help
	  Maximum number of events in the CAN shell transmit queue.

config CAN_SHELL_RX_QUEUE_SIZE
	int "CAN shell receive queue size"
	default 5
	range 1 256
	help
	  Maximum number of CAN frames in the CAN shell receive queue.

endif # CAN_SHELL

config CAN_STATS
	bool "CAN controller device statistics"
	depends on STATS
	help
	  Enable CAN controller device statistics.

config CAN_FD_MODE
	bool "CAN-FD"
	help
	  Enable CAN-FD support. Not all CAN controllers support CAN-FD.

config CAN_RX_TIMESTAMP
	bool "Receiving timestamps"
	help
	  This option enables a timestamp value of the CAN free running timer.
	  The value is incremented every bit time and starts when the controller
	  is initialized. Not all CAN controllers support timestamps.

config CAN_AUTO_BUS_OFF_RECOVERY
	bool "Automatic recovery from bus-off"
	default y
	help
	  This option enables the automatic bus-off recovery according to
	  ISO 11898-1 (recovery after 128 occurrences of 11 consecutive
	  recessive bits). When this option is enabled, the recovery API is not
	  available.

config CAN_QEMU_IFACE_NAME
	string "SocketCAN interface name for QEMU"
	default ""
	depends on QEMU_TARGET
	help
	  The SocketCAN interface name for QEMU. This value, if set, is given as "if" parameter to
	  the "-object can-host-socketcan" qemu command line option. The CAN interface must be
	  configured before starting QEMU.

source "drivers/can/Kconfig.sam"
source "drivers/can/Kconfig.sam0"
source "drivers/can/Kconfig.stm32"
source "drivers/can/Kconfig.stm32fd"
source "drivers/can/Kconfig.stm32h7"
source "drivers/can/Kconfig.mcux"
source "drivers/can/Kconfig.mcp2515"
source "drivers/can/Kconfig.mcan"
source "drivers/can/Kconfig.rcar"
source "drivers/can/Kconfig.loopback"
source "drivers/can/Kconfig.native_posix_linux"
source "drivers/can/Kconfig.sja1000"
source "drivers/can/Kconfig.esp32"
source "drivers/can/Kconfig.kvaser"
source "drivers/can/Kconfig.fake"
source "drivers/can/Kconfig.nxp_s32"

source "drivers/can/transceiver/Kconfig"

endif # CAN
