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

config AM2315
	tristate "Aosong AM2315 relative humidity and temperature sensor"
	depends on I2C
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	help
	  If you say yes here you get support for the Aosong AM2315
	  relative humidity and ambient temperature sensor.

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

config DHT11
	tristate "DHT11 (and compatible sensors) driver"
	depends on GPIOLIB || COMPILE_TEST
	help
	  This driver supports reading data via a single interrupt
	  generating GPIO line. Currently tested are DHT11 and DHT22.
	  Other sensors should work as well as long as they speak the
	  same protocol.

config HDC100X
	tristate "TI HDC100x relative humidity and temperature sensor"
	depends on I2C
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	help
	  Say yes here to build support for the Texas Instruments
	  HDC1000, HDC1008, HDC1010, HDC1050, and HDC1080 relative
	  humidity and temperature sensors.

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

config HDC2010
	tristate "TI HDC2010 relative humidity and temperature sensor"
	depends on I2C
	help
	  Say yes here to build support for the Texas Instruments
	  HDC2010 and HDC2080 relative humidity and temperature sensors.

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

config HID_SENSOR_HUMIDITY
	tristate "HID Environmental humidity 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
	  humidity driver

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

config HTS221
	tristate "STMicroelectronics HTS221 sensor Driver"
	depends on (I2C || SPI)
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	select HTS221_I2C if (I2C)
	select HTS221_SPI if (SPI_MASTER)
	help
	  Say yes here to build support for STMicroelectronics HTS221
	  temperature-humidity sensor

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

config HTS221_I2C
	tristate
	depends on HTS221
	select REGMAP_I2C

config HTS221_SPI
	tristate
	depends on HTS221
	select REGMAP_SPI

config HTU21
	tristate "Measurement Specialties HTU21 humidity & temperature sensor"
	depends on I2C
	select IIO_MS_SENSORS_I2C
	help
	  If you say yes here you get support for the Measurement Specialties
	  HTU21 humidity and temperature sensor.
	  This driver is also used for MS8607 temperature, pressure & humidity
	  sensor

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

config SI7005
	tristate "SI7005 relative humidity and temperature sensor"
	depends on I2C
	help
	  Say yes here to build support for the Silabs Si7005 relative
	  humidity and temperature sensor.

	  To compile this driver as a module, choose M here: the module
	  will be called si7005. This driver also
	  supports Hoperf TH02 Humidity and Temperature Sensor.

config SI7020
	tristate "Si7013/20/21 Relative Humidity and Temperature Sensors"
	depends on I2C
	help
	  Say yes here to build support for the Silicon Labs Si7013/20/21
	  Relative Humidity and Temperature Sensors. This driver also
	  supports Hoperf TH06 Humidity and Temperature Sensor.

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

endmenu
