# Kconfig - MCP9808 temperature sensor configuration options

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

menuconfig MCP9808
	bool "MCP9808 temperature sensor"
	depends on I2C
	default n
	help
	 Enable driver for MCP9808 temperature sensor.

config MCP9808_DEV_NAME
	string "MCP9808 device name"
	depends on MCP9808
	default "MCP9808"


config MCP9808_I2C_ADDR
	hex "MCP9808 I2C slave address"
	depends on MCP9808
	default 0x18
	help
	 Specify the I2C slave address for the MCP9808.

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

choice
	prompt "MCP9808 trigger mode"
	depends on MCP9808
	default MCP9808_TRIGGER_NONE

config MCP9808_TRIGGER_NONE
	bool "No trigger"

config MCP9808_TRIGGER_GLOBAL_THREAD
	depends on GPIO
	select MCP9808_TRIGGER
	bool "Use global thread"

config MCP9808_TRIGGER_OWN_THREAD
	depends on GPIO
	select MCP9808_TRIGGER
	bool "Use own thread"

endchoice

config MCP9808_TRIGGER
	bool
	depends on MCP9808

config MCP9808_GPIO_CONTROLLER
	string "GPIO controller for MCP9808 interrupt"
	depends on MCP9808 && MCP9808_TRIGGER
	default "GPIO_0"
	help
	  The GPIO controller the MCP9808 interrupt is connected to.

config MCP9808_GPIO_PIN
	int "GPIO pin for MCP9808 interrupt"
	depends on MCP9808 && MCP9808_TRIGGER
	default 3
	help
	  The GPIO pin the MCP9808 interrupt is connected to.

config MCP9808_THREAD_STACK_SIZE
	int "Sensor delayed work thread stack size"
	depends on MCP9808 && MCP9808_TRIGGER_OWN_THREAD
	default 1024

config MCP9808_THREAD_PRIORITY
	int "MCP9808 thread priority"
	depends on MCP9808 && MCP9808_TRIGGER_OWN_THREAD
	default 10
