# Kconfig - drivers configuration options for SeeedStudio Grove Devices

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


menuconfig GROVE
	bool
	prompt "Grove Device Drivers"
	default n
	help
	  Check this box to enable the Seeed Grove device drivers


config SYS_LOG_GROVE_LEVEL
	int
	prompt "Grove Log level"
	depends on SYS_LOG && GROVE
	default 0
	range 0 4
	help
	  Sets log level for Grove Device Drivers.
	  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 GROVE_LCD_RGB
	bool
	default n
	depends on GROVE
	prompt "Enable the Seeed Grove LCD RGB Backlight"
	help
	Setting this value will enable driver support for the Groove-LCD RGB
	Backlight.

config GROVE_LCD_RGB_I2C_MASTER_DEV_NAME
	string "I2C Master where Grove LCD is connected"
	depends on GROVE_LCD_RGB
	default "I2C_0"
	help
	Specify the device name of the I2C master device to which the
	Grove LCD is connected.

config GROVE_LIGHT_SENSOR
	bool
	prompt "Enable the Seeed Grove Light Sensor"
	depends on SENSOR && GROVE && ADC && NEWLIB_LIBC
	default n
	help
	  Setting this value will enable dirver support for the Grove Light
	  Sensor.

config GROVE_LIGHT_SENSOR_NAME
	string
	prompt "Driver name"
	depends on GROVE_LIGHT_SENSOR
	default "GROVE_LIGHT_SENSOR"
	help
	  Specify the device name with which the sensor is identified.

config GROVE_LIGHT_SENSOR_ADC_DEV_NAME
	string
	prompt "ADC where Grove Light Sensor is connected"
	depends on GROVE_LIGHT_SENSOR
	default "ADC_0"
	help
	  Specify the device name of the ADC to which the Grove Light Sensor
	  is connected.

config GROVE_LIGHT_SENSOR_ADC_CHANNEL
	int
	prompt "ADC channel used by Grove Light Sensor"
	depends on GROVE_LIGHT_SENSOR
	default 10
	help
	  Specify the channel of the ADC to which the Grove Light Sensor is
	  connected.

config GROVE_TEMPERATURE_SENSOR
	bool
	prompt "Enable the Seeed Grove Temperature Sensor"
	depends on SENSOR && GROVE && ADC && NEWLIB_LIBC
	default n
	help
	  Setting this value will enable dirver support for the Grove
	  Temperature Sensor.

config GROVE_TEMPERATURE_SENSOR_NAME
	string
	prompt "Driver name"
	depends on GROVE_TEMPERATURE_SENSOR
	default "GROVE_TEMPERATURE_SENSOR"
	help
	  Specify the device name with which the Grove Temperature Sensor
	  is identified.

choice
	prompt "Sensor version"
	depends on GROVE_TEMPERATURE_SENSOR
	default GROVE_TEMPERATURE_SENSOR_V1_0
	help
	  Choose the version of the Grove Temperature Sensor.

config GROVE_TEMPERATURE_SENSOR_V1_0
	bool
	prompt "v1.0"
	help
	  Version 1.0

config GROVE_TEMPERATURE_SENSOR_V1_X
	bool
	prompt "v1.1/v1.2"
	help
	  Version 1.1 or 1.2

endchoice

config GROVE_TEMPERATURE_SENSOR_ADC_DEV_NAME
	string
	prompt "ADC where Grove Temperature Sensor is connected"
	depends on GROVE_TEMPERATURE_SENSOR
	default "ADC_0"
	help
	  Specify the device name of the ADC to which the Grove Temperature
	  Sensor is connected.

config GROVE_TEMPERATURE_SENSOR_ADC_CHANNEL
	int
	prompt "ADC channel used by Grove Temperature Sensor"
	depends on GROVE_TEMPERATURE_SENSOR
	default 10
	help
	  Specify the channel of the ADC to which the Grove Temperature Sensor
	  is connected.
