# ADC configuration options

# Copyright (c) 2015 Intel Corporation
# SPDX-License-Identifier: Apache-2.0

config ADC_MCUX_ADC12
	bool "MCUX ADC12 driver"
	default y
	depends on DT_HAS_NXP_KINETIS_ADC12_ENABLED
	select PINCTRL
	help
	  Enable the MCUX ADC12 driver.

config ADC_MCUX_ADC16
	bool "MCUX ADC16 driver"
	default y
	depends on DT_HAS_NXP_KINETIS_ADC16_ENABLED
	select PINCTRL
	help
	  Enable the MCUX ADC16 driver.

config ADC_MCUX_12B1MSPS_SAR
	bool "MCUX 12B1MSPS SAR ADC driver"
	default y
	depends on DT_HAS_NXP_MCUX_12B1MSPS_SAR_ENABLED
	help
	  Enable the MCUX 12B1MSPS SAR ADC driver.

config ADC_MCUX_LPADC
	bool "MCUX LPADC driver"
	default y
	select ADC_CONFIGURABLE_INPUTS
	select REGULATOR
	depends on DT_HAS_NXP_LPC_LPADC_ENABLED
	help
	  Enable the MCUX LPADC driver.

config ADC_MCUX_ETC
	bool "MCUX ADC ETC driver"
	depends on HAS_MCUX_ADC_ETC
	help
	  Enable the MCUX ADC ETC driver.

config ADC_MCUX_GAU
	bool "MCUX GAU ADC driver"
	default y
	depends on DT_HAS_NXP_GAU_ADC_ENABLED
	select ADC_CONFIGURABLE_INPUTS
	help
	  Enable the GAU ADC driver

if ADC_MCUX_ADC16

choice
	prompt "Clock Divide Selection"
	default ADC_MCUX_ADC16_CLK_DIV_RATIO_1

config ADC_MCUX_ADC16_CLK_DIV_RATIO_1
	bool "Divide ratio is 1"

config ADC_MCUX_ADC16_CLK_DIV_RATIO_2
	bool "Divide ratio is 2"

config ADC_MCUX_ADC16_CLK_DIV_RATIO_4
	bool "Divide ratio is 4"

config ADC_MCUX_ADC16_CLK_DIV_RATIO_8
	bool "Divide ratio is 8"

endchoice

choice ADC_MCUX_ADC16_VREF
	prompt "Voltage Reference Selection"
	default ADC_MCUX_ADC16_VREF_DEFAULT

config ADC_MCUX_ADC16_VREF_DEFAULT
	bool "Default voltage reference pair V_REFH and V_REFL"

config ADC_MCUX_ADC16_VREF_ALTERNATE
	bool "Alternate reference pair"

endchoice

config ADC_MCUX_ADC16_ENABLE_EDMA
	bool "EDMA for adc driver"
	depends on HAS_MCUX_ADC16 && HAS_MCUX_EDMA
	help
	  Enable the MCUX ADC16 driver.

if ADC_MCUX_ADC16_ENABLE_EDMA

config ADC_MCUX_ADC16_HW_TRIGGER
	bool "ADC HW TRIGGER"
	default y
	help
	  Support HW Trigger ADC

endif # ADC_MCUX_ADC16_ENABLE_EDMA

endif # ADC_MCUX_ADC16


if ADC_MCUX_LPADC

config LPADC_DO_OFFSET_CALIBRATION
	bool "Do offset calibration"
	help
	  Do offset calibration

config LPADC_CHANNEL_COUNT
	int "LPADC channel count"
	default 15
	range 1 15
	help
	  Amount of hardware command channels to use, reduce to save RAM.
	  The user can reduce this value if their application uses fewer than
	  15 ADC channels. This value corresponds to how many of the CMD
	  registers can be configured within the ADC.


endif # ADC_MCUX_LPADC
