# Drivers configuration options for SeeedStudio Grove Devices

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

config GROVE_LIGHT_SENSOR
	bool "Enable the Seeed Grove Light Sensor"
	depends on ADC && !MINIMAL_LIBC
	help
	  Setting this value will enable driver support for the Grove Light
	  Sensor.

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

config GROVE_LIGHT_SENSOR_ADC_DEV_NAME
	string "ADC where Grove Light Sensor is connected"
	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 "ADC channel used by Grove Light Sensor"
	default 10
	help
	  Specify the channel of the ADC to which the Grove Light Sensor is
	  connected.
endif

config GROVE_TEMPERATURE_SENSOR
	bool "Enable the Seeed Grove Temperature Sensor"
	depends on ADC && !MINIMAL_LIBC
	help
	  Setting this value will enable driver support for the Grove
	  Temperature Sensor.

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

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

config GROVE_TEMPERATURE_SENSOR_V1_0
	bool "v1.0"
	help
	  Version 1.0

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

endchoice

config GROVE_TEMPERATURE_SENSOR_ADC_DEV_NAME
	string "ADC where Grove Temperature Sensor is connected"
	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 "ADC channel used by Grove Temperature Sensor"
	default 10
	help
	  Specify the channel of the ADC to which the Grove Temperature Sensor
	  is connected.

endif
