# Copyright (c) 2021 ATL-Electronics
# SPDX-License-Identifier: Apache-2.0

config ZEPHYR_HAL_GIGADEVICE_MODULE
	bool

config GD32_HAS_AF_PINMUX
	bool
	help
	  This option should be selected if the series use an AF pinmux model.

config GD32_HAS_AFIO_PINMUX
	bool
	help
	  This option should be selected if the series use an AFIO pinmux model.

config HAS_GD32_HAL
	bool
	select HAS_CMSIS_CORE if SOC_FAMILY_GD32_ARM

if HAS_GD32_HAL

choice GD32_HXTAL_FREQUENCY
	prompt "High speed external oscillator clock frequency"
	default GD32_HXTAL_FIRMWARE_DEFINED if \
		SOC_SERIES_GD32F403 || SOC_SERIES_GD32F4XX || SOC_SERIES_GD32F3X0
	default GD32_HXTAL_25MHZ if SOC_SERIES_GD32VF103 || SOC_SERIES_GD32E50X
	default GD32_HXTAL_8MHZ if SOC_SERIES_GD32E10X
	help
	  Define value of high speed crystal oscillator (HXTAL) in Hz
	  This value sets the frequency of the oscillator.

config GD32_HXTAL_FIRMWARE_DEFINED
	bool "Firmware defined"
	depends on !SOC_SERIES_GD32VF103
	depends on !SOC_SERIES_GD32E10X
	help
	  Use default frequency defined in firmware for HXTAL
	  This is using for SoCs (e.g. gd32f4xx, gd32f3x0, etc ...)
	  that have default HXTAL definitions in firmware.

config GD32_HXTAL_8MHZ
	bool "8MHz"
	depends on SOC_SERIES_GD32VF103 || SOC_SERIES_GD32E10X
	help
	  Use 8MHz oscillator for HXTAL

config GD32_HXTAL_25MHZ
	bool "25MHz"
	depends on SOC_SERIES_GD32VF103 || SOC_SERIES_GD32E10X
	help
	  Use 25MHz oscillator for HXTAL

endchoice

config USE_GD32_ADC
	bool
	help
	  Enable GD32 Analog-to-Digital Converter (ADC) HAL module driver

config USE_GD32_BKP
	bool
	help
	  Enable GD32 Backup Registers (BKP) HAL module driver

config USE_GD32_CAN
	bool
	help
	  Enable GD32 Controller Area Network (CAN) HAL module driver

config USE_GD32_CEC
	bool
	help
	  Enable GD32 Consumer Electronics Control (CEC) HAL module driver

config USE_GD32_CMP
	bool
	help
	  Enable GD32 Comparator (CMP) HAL module driver

config USE_GD32_CRC
	bool
	help
	  Enable GD32 Cyclic redundancy check calculation unit (CRC) HAL
	  module driver

config USE_GD32_CTC
	bool
	help
	  Enable GD32 Clock Trim Controller (CTC) HAL module driver

config USE_GD32_DAC
	bool
	help
	  Enable GD32 Digital-to-Analog Converter (DAC) HAL module driver

config USE_GD32_DBG
	bool
	help
	  Enable GD32 Debug (DBG) HAL module driver

config USE_GD32_DCI
	bool
	help
		Enable GD32 Digital Camera Interface (DCI) HAL module driver

config USE_GD32_DMA
	bool
	help
	  Enable GD32 Direct Memory Access controller (DMA) HAL module driver

config USE_GD32_ENET
	bool
	help
	  Enable GD32 Ethernet (ENET) HAL module driver

config USE_GD32_EXMC
	bool
	help
	  Enable GD32 External Memory Controller (EXMC) HAL module driver

config USE_GD32_EXTI
	bool
	help
	  Enable GD32 Interrupt/Event controller (EXTI) HAL module driver

config USE_GD32_FMC
	bool
	help
	  Enable GD32 Flash Memory Controller (FMC) HAL module driver

config USE_GD32_FWDGT
	bool
	help
	  Enable GD32 Free Watchdog Timer (FWDGT) HAL module driver

config USE_GD32_GPIO
	bool
	default y
	help
	  Enable GD32 General-purpose and Alternate-Function I/Os
	  (GPIO and AFIO) HAL module driver

config USE_GD32_I2C
	bool
	help
	  Enable GD32 Inter-Integrated Circuit Interface (I2C) HAL module driver

config USE_GD32_IPA
	bool
	help
	  Enable GD32 Image Processing Accelerator (IPA) HAL module driver

config USE_GD32_IREF
	bool
	help
	  Enable GD32 Programmable Current Reference (IREF) HAL module driver

config USE_GD32_MISC
	bool
	help
	  Enable GD32 System Utilities (MISC) HAL module driver

config USE_GD32_PMU
	bool
	help
	  Enable GD32 Power Management Unit (PMU) HAL module driver

config USE_GD32_RCU
	bool
	default y
	help
	  Enable GD32 Reset and Clock Unit (RCU) HAL module driver

config USE_GD32_RTC
	bool
	help
	  Enable GD32 Real-Time Clock (RTC) HAL module driver

config USE_GD32_SDIO
	bool
	help
	  Enable GD32 Secure Digital Input/Output interface (SDIO) HAL module
	  driver

config USE_GD32_SPI
	bool
	help
	  Enable GD32 Serial Peripheral Interface(SPI) HAL module driver

config USE_GD32_SQPI
	bool
	help
	  Enable GD32 Serial/Quad Parallel Interface (SQPI) HAL module driver

config USE_GD32_SHRTIMER
	bool
	help
	  Enable GD32 Super High-Resolution Timer (SHRTIMER) HAL module driver

config USE_GD32_SYSCFG
	bool
	help
	  Enable GD32 System Configuration (SYSCFG) HAL module driver

config USE_GD32_TIMER
	bool
	help
	  Enable GD32 Timer (TIMER) HAL module driver

config USE_GD32_TLI
	bool
	help
	  Enable GD32 TFT-LCD Interface (TLI) HAL module driver

config USE_GD32_TMU
	bool
	help
	  Enable GD32 Trigonometric Math Unit (TMU) HAL module driver

config USE_GD32_TRNG
	bool
	help
	  Enable GD32 True Random Number Generator (TRNG) HAL module driver

config USE_GD32_TSI
	bool
	help
	  Enable GD32 Touch Sensing Interface (TSI) HAL module driver

config USE_GD32_USART
	bool
	help
	  Enable GD32 Universal Synchronous/Asynchronous Receiver/Transmitter
	  (USART) HAL module driver

config USE_GD32_USBD
	bool
	help
	  Enable GD32 Universal Serial Bus full-speed Device interface (USBD)
	  HAL module driver

config USE_GD32_USBFS
	bool
	help
	  Enable GD32 Universal Serial Bus on-the-go Full-Speed (USBFS) HAL
	  module driver

config USE_GD32_USBHS
	bool
	help
	  Enable GD32 Universal Serial Bus High-Speed interface (USBHS) HAL
	  module driver

config USE_GD32_WWDGT
	bool
	help
	  Enable GD32 Window Watchdog Timer (WWDGT) HAL module driver

endif # HAS_GD32_HAL
