# 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 ENS210
	tristate "ENS210 temperature and humidity sensor"
	depends on I2C
	select CRC7
	help
	  Say yes here to get support for the ScioSense ENS210 family of
	  humidity and temperature sensors.

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

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 HDC3020
	tristate "TI HDC3020 relative humidity and temperature sensor"
	depends on I2C
	select CRC8
	help
	  Say yes here to build support for the Texas Instruments
	  HDC3020, HDC3021 and HDC3022 relative humidity and temperature
	  sensors.

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

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
