# Kconfig.tmp007 - TMP007 infrared thermopile 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 TMP007
	bool
	prompt "TMP007 Infrared Thermopile Sensor"
	depends on SENSOR && I2C
	default n
	help
	  Enable driver for TMP007 infrared thermopile sensors.

config TMP007_SYS_LOG_LEVEL
	int "TMP007 Log level"
	depends on SYS_LOG && TMP007
	default 0
	range 0 4
	help
	  Sets log level for TMP007 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 TMP007_NAME
	string
	prompt "Driver name"
	default "TMP007"
	depends on TMP007
	help
	  Device name with which the TMP007 sensor is identified.

config TMP007_INIT_PRIORITY
	int
	prompt "Init priority"
	depends on TMP007
	default 70
	help
	  Device driver initialization priority.

choice
	prompt "I2C address"
	depends on TMP007
	default TMP007_I2C_ADDR_0
	help
	  I2C address of the TMP007 sensor.

config TMP007_I2C_ADDR_0
	bool
	prompt "0x40"
	help
	  A0 connected GND and A1 connected to GND.

config TMP007_I2C_ADDR_1
	bool
	prompt "0x41"
	help
	  A0 connected VDD and A1 connected to GND.

config TMP007_I2C_ADDR_2
	bool
	prompt "0x42"
	help
	  A0 connected SDA and A1 connected to GND.

config TMP007_I2C_ADDR_3
	bool
	prompt "0x43"
	help
	  A0 connected SCL and A1 connected to GND.

config TMP007_I2C_ADDR_4
	bool
	prompt "0x44"
	help
	  A0 connected GND and A1 connected to VDD.

config TMP007_I2C_ADDR_5
	bool
	prompt "0x45"
	help
	  A0 connected VDD and A1 connected to VDD.

config TMP007_I2C_ADDR_6
	bool
	prompt "0x46"
	help
	  A0 connected SDA and A1 connected to VDD.

config TMP007_I2C_ADDR_7
	bool
	prompt "0x47"
	help
	  A0 connected SCL and A1 connected to VDD.

endchoice

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

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

config TMP007_TRIGGER_NONE
	bool
	prompt "No trigger"

config TMP007_TRIGGER_GLOBAL_FIBER
	bool
	prompt "Use global fiber"
	depends on GPIO
	select TMP007_TRIGGER
	select SENSOR_DELAYED_WORK

config TMP007_TRIGGER_OWN_FIBER
	bool
	prompt "Use own fiber"
	depends on GPIO
	select TMP007_TRIGGER

endchoice

config TMP007_TRIGGER
	bool
	depends on TMP007

config TMP007_GPIO_DEV_NAME
	string
	prompt "GPIO device"
	default "GPIO_0"
	depends on TMP007 && TMP007_TRIGGER
	help
	  The device name of the GPIO device to which the TMP007 interrupt
	  (alert) pin is connected.

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

config TMP007_FIBER_PRIORITY
	int
	prompt "Fiber priority"
	depends on TMP007 && TMP007_TRIGGER_OWN_FIBER
	default 10
	help
	  Priority of fiber used by the driver to handle interrupts.

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