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

menu "Chemical Sensors"

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