#
# 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 HTS221
	bool
	prompt "HTS221 temperature and humidity sensor"
	depends on SENSOR && I2C
	default n
	help
	  Enable driver for HTS221 I2C-based temperature and humidity sensor.

config HTS221_SYS_LOG_LEVEL
	int "HTS221 Log level"
	depends on SYS_LOG && HTS221
	default 0
	range 0 4
	help
	Sets log level for HTS221 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

config HTS221_NAME
	string
	prompt "Driver name"
	default "HTS221"
	depends on HTS221
	help
	  Device name with which the HTS221 sensor is identified.

config HTS221_INIT_PRIORITY
	int
	prompt "Init priority"
	depends on HTS221
	default 70
	help
	  Device driver initialization priority.

config HTS221_I2C_MASTER_DEV_NAME
	string
	prompt "I2C master where HTS221 is connected"
	depends on HTS221
	default "I2C_0"
	help
	  Specify the device name of the I2C master device to which HTS221 is
	  connected.

choice
	prompt "Trigger mode"
	depends on HTS221
	default HTS221_TRIGGER_GLOBAL_FIBER
	help
	  Specify the type of triggering to be used by the driver.

config HTS221_TRIGGER_NONE
	bool
	prompt "No trigger"

config HTS221_TRIGGER_GLOBAL_FIBER
	bool
	prompt "Use global fiber"
	depends on GPIO && SYSTEM_WORKQUEUE
	select HTS221_TRIGGER

config HTS221_TRIGGER_OWN_FIBER
	bool
	prompt "Use own fiber"
	depends on GPIO
	select HTS221_TRIGGER

endchoice

config HTS221_TRIGGER
	bool
	depends on HTS221

config HTS221_GPIO_DEV_NAME
	string
	prompt "GPIO device"
	default "GPIO_0"
	depends on HTS221 && HTS221_TRIGGER
	help
	  The device name of the GPIO device to which the HTS221 interrupt pin
	  is connected.

config HTS221_GPIO_PIN_NUM
	int
	prompt "Interrupt GPIO pin number"
	default 0
	depends on HTS221 && HTS221_TRIGGER
	help
	  The number of the GPIO on which the interrupt signal from the HTS221
	  chip will be received.

config HTS221_FIBER_PRIORITY
	int
	prompt "Fiber priority"
	depends on HTS221 && HTS221_TRIGGER_OWN_FIBER
	default 10
	help
	  Priority of fiber used by the driver to handle interrupts.

config HTS221_FIBER_STACK_SIZE
	int
	prompt "Fiber stack size"
	depends on HTS221 && HTS221_TRIGGER_OWN_FIBER
	default 1024
	help
	  Stack size of fiber used by the driver to handle interrupts.

config HTS221_ODR
	string
	prompt "Output data rate"
	depends on HTS221
	default "1"
	help
	  Sensor output data rate expressed in samples per second.
	  Data rates supported by the chip are 1, 7 and 12.5.
