# 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
	select PINCTRL
	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 PINCTRL
	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 PINCTRL
	select USE_STM32_LL_RCC
