# 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_LCD_RGB_INIT_PRIORITY
	int
	prompt "Init priority"
	default 70
	depends on GROVE_LCD_RGB
	help
	  Device driver initialization priority.
	  As the device is connected to I2C bus, its driver has
	  to be initialized after the I2C one.

config GROVE_LIGHT_SENSOR
	bool
	prompt "Enable the Seeed Grove Light Sensor"
	depends on 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_LIGHT_SENSOR_INIT_PRIORITY
	int
	prompt "Init priority"
	default 70
	depends on GROVE_LIGHT_SENSOR
	help
	  Device driver initialization priority.
	  As the device is connected to an ADC device, its driver has to be
	  initialized after the ADC device.

config GROVE_TEMPERATURE_SENSOR
	bool
	prompt "Enable the Seeed Grove Temperature Sensor"
	depends on 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.

config GROVE_TEMPERATURE_SENSOR_INIT_PRIORITY
	int
	prompt "Init priority"
	default 70
	depends on GROVE_TEMPERATURE_SENSOR
	help
	  Device driver initialization priority.
	  As the device is connected to an ADC device, its driver has to be
	  initialized after the ADC device.
