# CAN configuration options

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

#
# CAN options
#
menuconfig CAN
	bool "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 init priority"
	default KERNEL_INIT_PRIORITY_DEVICE
	help
	  CAN driver device initialization priority.

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

config CAN_HAS_CANFD
	bool
	help
	  driver supports CAN-FD

config CAN_HAS_RX_TIMESTAMP
	bool
	help
	  driver supports RX timestamps

config CAN_FD_MODE
	bool "CAN-FD"
	default y
	depends on CAN_HAS_CANFD
	help
	  Enable CAN-FD compatible API

if CAN_FD_MODE

config CANFD_MAX_DLC
	int "Max data length code in CAN frames"
	range 8 15
	default 15
	help
	  Maximum allowed DLC in a CAN frame. This parameter sets the
	  data buffer size in a CAN frame and is therefore only used to
	  optimize memory consumption.
endif # CAN_FD_MODE

config CAN_INIT_PRIORITY
	int "CAN driver init priority"
	default 80
	help
	  CAN device driver initialization priority.
	  Do not mess with it unless you know what you are doing.
	  Note that the priority needs to be lower than the net stack
	  so that it can start before the networking sub-system.

config CAN_WORKQ_FRAMES_BUF_CNT
	int "Work queue buffer frame count (DEPRECATED)"
	default 4
	range 1 65534
	help
	  Number of frames in the buffer of a zcan_work.

config CAN_RX_TIMESTAMP
	bool "Enable receiving timestamps"
	depends on CAN_HAS_RX_TIMESTAMP
	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.

config CAN_AUTO_BUS_OFF_RECOVERY
	bool "Enable 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.

source "drivers/can/Kconfig.sam"
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.net"

endif # CAN
