# STM32 CAN configuration options

# Copyright (c) 2022 Blue Clover
# Copyright (c) 2018-2020 Alexander Wachter
# SPDX-License-Identifier: Apache-2.0

config CAN_STM32_BXCAN
	bool "STM32 bxCAN driver"
	default y
	depends on DT_HAS_ST_STM32_BXCAN_ENABLED
	help
	  Enable STM32 bxCAN Driver.

if CAN_STM32_BXCAN

config CAN_MAX_STD_ID_FILTER
	int "Maximum number of standard (11-bit) ID filters"
	default 14
	range 0 28
	help
	  Defines the maximum number of filters with standard ID (11-bit)
	  that can be added by the application.

	  One standard ID filter with mask occupies 1/2 of the 14 available
	  filter banks.

	  The following equation determines the maximum total number of
	  filters:

	    CAN_MAX_STD_ID_FILTER + CAN_MAX_EXT_ID_FILTER * 2 <= 28

config CAN_MAX_EXT_ID_FILTER
	int "Maximum number of extended (29-bit) ID filters"
	default 7
	range 0 14
	help
	  Defines the maximum number of filters with extended ID (29-bit)
	  that can be added by the application.

	  One extended ID filter with mask occupies 1 of the 14 available
	  filter banks.

	  The following equation determines the maximum total number of
	  filters:

	    CAN_MAX_STD_ID_FILTER + CAN_MAX_EXT_ID_FILTER * 2 <= 28

endif # CAN_STM32_BXCAN

config CAN_STM32_FDCAN
	bool "STM32 FDCAN driver"
	default y
	depends on DT_HAS_ST_STM32_FDCAN_ENABLED
	select CAN_MCAN
	select USE_STM32_LL_RCC

if CAN_STM32_FDCAN

config CAN_MAX_STD_ID_FILTER
	int "Maximum number of standard (11-bit) ID filters"
	default 28
	range 0 28
	help
	  Defines the maximum number of filters with standard ID (11-bit)
	  that can be added by the application.

config CAN_MAX_EXT_ID_FILTER
	int "Maximum number of extended (29-bit) ID filters"
	default 8
	range 0 8
	help
	  Defines the maximum number of filters with extended ID (29-bit)
	  that can be added by the application.

endif # CAN_STM32_FDCAN

config CAN_STM32H7_FDCAN
	bool "STM32H7 FDCAN driver"
	default y
	depends on DT_HAS_ST_STM32H7_FDCAN_ENABLED
	select CAN_MCAN
	select USE_STM32_LL_RCC
