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