# SPDX-License-Identifier: GPL-2.0-only
#
# Chemical sensors
#

menu "Chemical Sensors"

config AOSONG_AGS02MA
	tristate "Aosong AGS02MA TVOC sensor driver"
	depends on I2C
	select CRC8
	help
	  Say Y here to build support for Aosong AGS02MA TVOC (Total Volatile
	  Organic Compounds) sensor.

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

config ATLAS_PH_SENSOR
	tristate "Atlas Scientific OEM SM sensors"
	depends on I2C
	select REGMAP_I2C
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	select IRQ_WORK
	help
	  Say Y here to build I2C interface support for the following
	  Atlas Scientific OEM SM sensors:
	    * pH SM sensor
	    * EC SM sensor
	    * ORP SM sensor

	  To compile this driver as module, choose M here: the
	  module will be called atlas-ph-sensor.

config ATLAS_EZO_SENSOR
	tristate "Atlas Scientific EZO sensors"
	depends on I2C
	help
	  Say Y here to build I2C interface support for the following
	  Atlas Scientific EZO sensors
	    * CO2 EZO Sensor

	  To compile this driver as module, choose M here: the
	  module will be called atlas-ezo-sensor.

config BME680
	tristate "Bosch Sensortec BME680 sensor driver"
	depends on (I2C || SPI)
	select REGMAP
	select BME680_I2C if I2C
	select BME680_SPI if SPI
	help
	  Say yes here to build support for Bosch Sensortec BME680 sensor with
	  temperature, pressure, humidity and gas sensing capability.

	  This driver can also be built as a module. If so, the module for I2C
	  would be called bme680_i2c and bme680_spi for SPI support.

config BME680_I2C
	tristate
	depends on I2C && BME680
	select REGMAP_I2C

config BME680_SPI
	tristate
	depends on SPI && BME680
	select REGMAP_SPI

config CCS811
	tristate "AMS CCS811 VOC sensor"
	depends on I2C
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	help
	  Say Y here to build I2C interface support for the AMS
	  CCS811 VOC (Volatile Organic Compounds) sensor

config ENS160
	tristate "ScioSense ENS160 sensor driver"
	depends on (I2C || SPI)
	select REGMAP
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	select ENS160_I2C if I2C
	select ENS160_SPI if SPI
	help
	  Say yes here to build support for ScioSense ENS160 multi-gas sensor.

	  This driver can also be built as a module. If so, the module for I2C
	  would be called ens160_i2c and ens160_spi for SPI support.

config ENS160_I2C
	tristate
	select REGMAP_I2C

config ENS160_SPI
	tristate
	select REGMAP_SPI

config IAQCORE
	tristate "AMS iAQ-Core VOC sensors"
	depends on I2C
	help
	  Say Y here to build I2C interface support for the AMS
	  iAQ-Core Continuous/Pulsed VOC (Volatile Organic Compounds)
	  sensors

config PMS7003
	tristate "Plantower PMS7003 particulate matter sensor"
	depends on SERIAL_DEV_BUS
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	help
	  Say Y here to build support for the Plantower PMS7003 particulate
	  matter sensor.

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

config SCD30_CORE
	tristate "SCD30 carbon dioxide sensor driver"
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	help
	  Say Y here to build support for the Sensirion SCD30 sensor with carbon
	  dioxide, relative humidity and temperature sensing capabilities.

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

config SCD30_I2C
	tristate "SCD30 carbon dioxide sensor I2C driver"
	depends on SCD30_CORE && I2C
	select CRC8
	help
	  Say Y here to build support for the Sensirion SCD30 I2C interface
	  driver.

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

config SCD30_SERIAL
	tristate "SCD30 carbon dioxide sensor serial driver"
	depends on SCD30_CORE && SERIAL_DEV_BUS
	select CRC16
	help
	  Say Y here to build support for the Sensirion SCD30 serial interface
	  driver.

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

config SCD4X
	tristate "SCD4X carbon dioxide sensor driver"
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	depends on I2C
	select CRC8
	help
	  Say Y here to build support for the Sensirion SCD4X sensor with carbon
	  dioxide, relative humidity and temperature sensing capabilities.

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

config SENSIRION_SGP30
	tristate "Sensirion SGPxx gas sensors"
	depends on I2C
	select CRC8
	help
	  Say Y here to build I2C interface support for the following
	  Sensirion SGP gas sensors:
	    * SGP30 gas sensor
	    * SGPC3 low power gas sensor

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

config SENSIRION_SGP40
	tristate "Sensirion SGP40 gas sensor"
	depends on I2C
	select CRC8
	help
	  Say Y here to build I2C interface to support Sensirion SGP40 gas
	  sensor

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

config SPS30
	tristate
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER

config SPS30_I2C
	tristate "SPS30 particulate matter sensor I2C driver"
	depends on I2C
	select SPS30
	select CRC8
	help
	  Say Y here to build support for the Sensirion SPS30 I2C interface
	  driver.

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

config SPS30_SERIAL
	tristate "SPS30 particulate matter sensor serial driver"
	depends on SERIAL_DEV_BUS
	select SPS30
	help
	  Say Y here to build support for the Sensirion SPS30 serial interface
	  driver.

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

config SENSEAIR_SUNRISE_CO2
	tristate "Senseair Sunrise 006-0-0007 CO2 sensor"
	depends on I2C
	select REGMAP_I2C
	help
	  Say yes here to build support for Senseair Sunrise 006-0-0007 CO2
	  sensor.

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

config VZ89X
	tristate "SGX Sensortech MiCS VZ89X VOC sensor"
	depends on I2C
	help
	  Say Y here to build I2C interface support for the SGX
	  Sensortech MiCS VZ89X VOC (Volatile Organic Compounds)
	  sensors

endmenu
