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

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 IIO_TRIGGERED_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 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 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 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.

endmenu
