# Kconfig.dht - DHT Temperature and Himidity Sensor configuration options

#
# Copyright (c) 2016 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 DHT
	bool
	prompt "DHT Temperature and Humidity Sensor"
	depends on SENSOR && GPIO
	default n
	help
	  Enable driver for the DHT temperature and humidity sensor family.

config DHT_SYS_LOG_LEVEL
	int "DHT Log level"
	depends on SYS_LOG && DHT
	default 0
	range 0 4
	help
	  Sets log level for DHT driver.
	  Levels are:
	  0 OFF, do not write
	  1 ERROR, only write SYS_LOG_ERR
	  2 WARNING, write SYS_LOG_WRN in addition to previous level
	  3 INFO, write SYS_LOG_INF in addition to previous levels
	  4 DEBUG, write SYS_LOG_DBG in addition to previous levels

choice
	prompt "Chip type"
	depends on DHT
	default DHT_CHIP_DHT11
	help
	  Choose desired chip type from the DHT family.

config DHT_CHIP_DHT11
	bool
	prompt "DHT11"
	help
	  Choose this option to enable the DHT11 chip.

config DHT_CHIP_DHT22
	bool
	prompt "DHT22"
	help
	  Choose this option to enable the DHT22 chip.

endchoice

config DHT_NAME
	string
	prompt "Driver name"
	default "DHT11" if DHT_CHIP_DHT11
	default "DHT22" if DHT_CHIP_DHT22
	depends on DHT
	help
	  Device name with which the sensor is identified.

config DHT_INIT_PRIORITY
	int
	prompt "Init priority"
	depends on DHT
	default 70
	help
	  Device driver initialization priority.

config DHT_GPIO_DEV_NAME
	string
	prompt "GPIO device"
	default "GPIO_0"
	depends on DHT
	help
	  The device name of the GPIO device to which the chip's data pin
	  is connected.

config DHT_GPIO_PIN_NUM
	int
	prompt "Interrupt GPIO pin number"
	default 0
	depends on DHT
	help
	  The number of the GPIO on which the chip's data pin is connected.
