# Kconfig - ADC configuration options

#
# Copyright (c) 2015 Intel Corporation
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

#
# ADC options
#
menuconfig ADC
	bool
	prompt "ADC drivers"
	default n
	help
	Enable ADC (Analog to Digital Converter) driver configuration

config SYS_LOG_ADC_LEVEL
	int
	prompt "ADC drivers log level"
	depends on ADC
	default 0
	range 0 4
	help

	Sets log level for ADC driver.

	Levels are:

	- 0 OFF, do not write

	- 1 ERROR, only write SYS_LOG_ERR

	- 2 WARNING, write SYS_LOG_WRN in adition to previous level

	- 3 INFO, write SYS_LOG_INF in adition to previous levels

	- 4 DEBUG, write SYS_LOG_DBG in adition to previous levels

config ADC_INIT_PRIORITY
	int
	depends on ADC
	default 80
	prompt "Init priority"
	help
	  ADC Device driver initialization priority.

config ADC_0_NAME
	string "ADC Driver's name"
	depends on ADC
	default "ADC_0"

config ADC_0_IRQ_PRI
	int
	depends on ADC
	prompt "ADC interrupt priority"
	default 2

menuconfig ADC_TI_ADC108S102
	bool "TI adc108s102 chip driver"
	depends on ADC
	select SPI
	select NANO_TIMEOUTS
	default n
	help
	Enable support for TI's ADC chip adc108s102 driver.

if ADC_TI_ADC108S102

config ADC_TI_ADC108S102_SPI_PORT_NAME
	string "Master SPI port name"
	depends on ADC_TI_ADC108S102
	default ""
	help
	Master SPI port name through which adc108s102 chip is accessed.

config ADC_TI_ADC108S102_SPI_CONFIGURATION
	hex "Master SPI port configuration"
	depends on ADC_TI_ADC108S102
	default 0x0
	help
	Master SPI port configuration flags used to access adc108s102 chip.

config ADC_TI_ADC108S102_SPI_MAX_FREQ
	hex "Master SPI port max frequency"
	depends on ADC_TI_ADC108S102
	default 0x0
	help
	Master SPI port maximum frequency used to access adc108s102 chip.

config ADC_TI_ADC108S102_SPI_SLAVE
	int "SPI slave slot"
	depends on ADC_TI_ADC108S102
	default 0
	help
	adc108s102 chip's SPI slave number on master SPI port.

endif # ADC_TI_ADC108S102

menuconfig ADC_DW
	bool "ARC Designware Driver"
	depends on ADC && ARC
	default n
	help
	Enable the driver implementation of the Designware ADC IP.

if ADC_DW


config ADC_DW_CALIBRATION
	bool "Enable Calibration"
	default y
	depends on ADC_DW
	help
	Enables ADC to run with a calibrated output at the
	expense of execution speed when exiting low power states.
	If disabled, the ADC will require the application/system-integrator
	to provide a calibration method.

config ADC_DW_DUMMY_CONVERSION
	bool "Enable dummy conversion"
	default y
	depends on ADC_DW
	help
	After awaking from low power state a dummy
	conversion must be performed and discarded.
	If disabled the user will have to discard the first
	sample after a resume from a low power state.

choice
	prompt "Output Mode"
	default ADC_DW_SERIAL
	depends on ADC_DW
	help
	ADC output mode: parallel or serial.

config ADC_DW_SERIAL
	bool "Serial"

config ADC_DW_PARALLEL
	bool "Parallel"

endchoice

choice
	prompt "Sequence Mode"
	default ADC_DW_SINGLESHOT
	depends on ADC_DW
	help
	ADC sequence mode - single run/repetitive

config ADC_DW_SINGLESHOT
	bool "Single Ended"

config ADC_DW_REPETITIVE
	bool "Differential"

endchoice

choice
	prompt "Capture Mode"
	default ADC_DW_RISING_EDGE
	depends on ADC_DW
	help
	ADC controller capture mode:
	by rising or falling edge of adc_clk

config ADC_DW_RISING_EDGE
	bool "Rising Edge"

config ADC_DW_FALLING_EDGE
	bool "Falling Edge"

endchoice

config ADC_DW_SAMPLE_WIDTH
	int "Sample Width"
	depends on ADC_DW
	default 31
	help
	Defines ADC device data sample width (resolution):

	- 0 = 6 bits resolution

	- 1 = 8 bits resolution

	- 2 = 10 bits resolution

	- 3 = 12 bits resolution

config ADC_DW_SERIAL_DELAY
	int "Serial Delay"
	default 1
	help
	Number of ADC clock ticks that the first bit of
	the serial output is delayed after the conversion
	has started.

config ADC_DW_CLOCK_RATIO
	int "Clock Ratio"
	default 1024
	help
	ADC Clock Ratio

endif

menuconfig ADC_QMSI
	bool "QMSI ADC Driver"
	depends on QMSI && ADC
	default n
	help
	Enable the driver implementation of the QMSI ADC IP.

menuconfig ADC_QMSI_SS
	bool "QMSI ADC Driver for the Sensor Subsystem"
	depends on QMSI && ADC
	default n
	help
	Enable the driver implementation of the QMSI ADC IP.

if ADC_QMSI || ADC_QMSI_SS

choice
	prompt "Capturing Mode"
	default ADC_QMSI_INTERRUPT
	help
	ADC sample capture mode - interrupt mode/polling mode

config ADC_QMSI_POLL
	bool "Polling samples"

config ADC_QMSI_INTERRUPT
	bool "Interrupt notification"

endchoice

config ADC_QMSI_CALIBRATION
	bool "Enable Calibration"
	default y
	help
	Enables ADC to run with a calibrated output at the
	expense of execution speed when exiting low power states.
	If disabled, the ADC will require the application/system-integrator
	to provide a calibration method.

config ADC_QMSI_CLOCK_RATIO
	int "Clock Ratio"
	default 100
	help
	ADC Clock Ratio

config ADC_QMSI_SERIAL_DELAY
	int "Serial Delay"
	default 1
	help
	Number of ADC clock ticks that the first bit of
	the serial output is delayed after the conversion
	has started.

#if ADC_QMSI
config ADC_QMSI_SAMPLE_WIDTH
	int "Sample Width"
	default 3
	help
	Defines ADC device data sample width (resolution):

	- 0 = 6 bits resolution

	- 1 = 8 bits resolution

	- 2 = 10 bits resolution

	- 3 = 12 bits resolution
#endif

#if ADC_QMSI_SS
config ADC_QMSI_SAMPLE_WIDTH
	int "Sample Width"
	default 11
	help
	Defines ADC device data sample width (resolution):

	- 5 = 6 bits resolution

	- 7 = 8 bits resolution

	- 9 = 10 bits resolution

	- 11 = 12 bits resolution
#endif

endif # ADC_QMSI || ADC_QMSI_SS
