# 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  ADC_DEBUG
	bool "ADC drivers debug output"
	depends on ADC
	default n
	help
	Enable debug output for ADC drivers

config  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.

config ADC_TI_ADC108S102_INIT_PRIORITY
	int
	depends on ADC_TI_ADC108S102
	default 80
	prompt "Init priority"
	help
	  Device driver initialization priority.
	  Device is connected to SPI bus, it has to
	  be initialized after SPI driver.

config  ADC_TI_ADC108S102_0
	bool "First instance of TI's adc108s102 chip"
	depends on ADC_TI_ADC108S102
	default n
	help
	Enalbe first instance of adc108s102 driver.

config  ADC_TI_ADC108S102_0_DRV_NAME
	string "Driver's name"
	depends on ADC_TI_ADC108S102_0
	default "adc108s102_0"

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

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

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

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

config 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_0
	bool "First instance of DW's ADC chip"
	default n
	help
	Enable first instance of ADC DW driver.

config ADC_DW_NAME_0
	string "Select a name to lookup the device"
	default "ADC0"
	depends on ADC_DW_0

config ADC_DW_0_RX_IRQ
        int
        prompt "ADC 0 reception interrupt"
        depends on ADC_DW_0
        default 19

config ADC_DW_0_ERR_IRQ
        int
        prompt "ADC 0 error interrupt"
        depends on ADC_DW_0
        default 18

config ADC_DW_0_PRI
        int
        prompt "ADC 0 interrupts' priority"
        depends on ADC_DW_0
        default 2

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
