#
# 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 magnetometer"
	depends on SENSOR && I2C
	default n
	help
	  Enable driver for HTS221 I2C-based magnetometer.

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.
