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

config HTS221_SPI
	tristate
	depends on HTS221

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
