# 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

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
