# 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_GD32VF103
	default GD32_HXTAL_25MHZ if SOC_SERIES_GD32VF103
	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
