# SPDX-License-Identifier: GPL-2.0-only
#
# Temperature sensor drivers
#
menu "Temperature sensors"

config IQS620AT_TEMP
	tristate "Azoteq IQS620AT temperature sensor"
	depends on MFD_IQS62X || COMPILE_TEST
	help
	  Say Y here if you want to build support for the Azoteq IQS620AT
	  temperature sensor.

	  To compile this driver as a module, choose M here: the module
	  will be called iqs620at-temp.

config LTC2983
	tristate "Analog Devices Multi-Sensor Digital Temperature Measurement System"
	depends on SPI
	select REGMAP_SPI
	help
	  Say yes here to build support for the LTC2983 Multi-Sensor
	  high accuracy digital temperature measurement system.

	  To compile this driver as a module, choose M here: the module
	  will be called ltc2983.

config MAXIM_THERMOCOUPLE
	tristate "Maxim thermocouple sensors"
	depends on SPI
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	help
	  If you say yes here you get support for the Maxim series of
	  thermocouple sensors connected via SPI.

	  Supported sensors:
	   * MAX6675
	   * MAX31855

	  This driver can also be built as a module. If so, the module will
	  be called maxim_thermocouple.

config HID_SENSOR_TEMP
	tristate "HID Environmental temperature sensor"
	depends on HID_SENSOR_HUB
	select IIO_BUFFER
	select HID_SENSOR_IIO_COMMON
	select HID_SENSOR_IIO_TRIGGER
	help
	  Say yes here to build support for the HID SENSOR
	  temperature driver

	  To compile this driver as a module, choose M here: the module
	  will be called hid-sensor-temperature.

config MLX90614
	tristate "MLX90614 contact-less infrared sensor"
	depends on I2C
	help
	  If you say yes here you get support for the Melexis
	  MLX90614 contact-less infrared sensor connected with I2C.

	  This driver can also be built as a module. If so, the module will
	  be called mlx90614.

config MLX90632
	tristate "MLX90632 contact-less infrared sensor with medical accuracy"
	depends on I2C
	select REGMAP_I2C
	help
	  If you say yes here you get support for the Melexis
	  MLX90632 contact-less infrared sensor with medical accuracy
	  connected with I2C.

	  This driver can also be built as a module. If so, the module will
	  be called mlx90632.

config MLX90635
	tristate "MLX90635 contact-less infrared sensor with medical accuracy"
	depends on I2C
	select REGMAP_I2C
	help
	  If you say yes here you get support for the Melexis
	  MLX90635 contact-less infrared sensor with medical accuracy
	  connected with I2C.

	  This driver can also be built as a module. If so, the module will
	  be called mlx90635.

config TMP006
	tristate "TMP006 infrared thermopile sensor"
	depends on I2C
	help
	  If you say yes here you get support for the Texas Instruments
	  TMP006 infrared thermopile sensor.

	  This driver can also be built as a module. If so, the module will
	  be called tmp006.

config TMP007
	tristate "TMP007 infrared thermopile sensor with Integrated Math Engine"
	depends on I2C
	help
	  If you say yes here you get support for the Texas Instruments
	  TMP007 infrared thermopile sensor with Integrated Math Engine.

	  This driver can also be built as a module. If so, the module will
	  be called tmp007.

config TMP117
	tristate "TMP117 Digital temperature sensor with integrated NV memory"
	depends on I2C
	help
	  If you say yes here you get support for the Texas Instruments
	  TMP117 Digital temperature sensor with integrated NV memory.

	  This driver can also be built as a module. If so, the module will
	  be called tmp117.

config TSYS01
	tristate "Measurement Specialties TSYS01 temperature sensor using I2C bus connection"
	depends on I2C
	select IIO_MS_SENSORS_I2C
	help
	  If you say yes here you get support for the Measurement Specialties
	  TSYS01 I2C temperature sensor.

	  This driver can also be built as a module. If so, the module will
	  be called tsys01.

config TSYS02D
	tristate "Measurement Specialties TSYS02D temperature sensor"
	depends on I2C
	select IIO_MS_SENSORS_I2C
	help
	  If you say yes here you get support for the Measurement Specialties
	  TSYS02D temperature sensor.

	  This driver can also be built as a module. If so, the module will
	  be called tsys02d.

config MAX30208
	tristate "Maxim MAX30208 digital temperature sensor"
	depends on I2C
	help
	  If you say yes here you get support for Maxim MAX30208
	  digital temperature sensor connected via I2C.

	  This driver can also be built as a module. If so, the module
	  will be called max30208.

config MAX31856
	tristate "MAX31856 thermocouple sensor"
	depends on SPI
	help
	  If you say yes here you get support for MAX31856
	  thermocouple sensor chip connected via SPI.

	  This driver can also be built as a module.  If so, the module
	  will be called max31856.

config MAX31865
	tristate "MAX31865 RTD to Digital converter"
	depends on SPI
	help
	  If you say yes here you get support for MAX31865
	  thermocouple sensor chip connected via SPI.

	  This driver can also be build as a module. If so, the module
	  will be called max31865.

config MCP9600
	tristate "MCP9600 thermocouple EMF converter"
	depends on I2C
	help
	  If you say yes here you get support for MCP9600
	  thermocouple EMF converter connected via I2C.

	  This driver can also be built as a module. If so, the module
	  will be called mcp9600.

endmenu
