# SPDX-License-Identifier: GPL-2.0-only
#
# Pressure drivers
#
# When adding new entries keep the list in alphabetical order

menu "Pressure sensors"

config ABP060MG
	tristate "Honeywell ABP pressure sensor driver"
	depends on I2C
	help
	  Say yes here to build support for the Honeywell ABP pressure
	  sensors.

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

config BMP280
	tristate "Bosch Sensortec BMP180/BMP280 pressure sensor I2C driver"
	depends on (I2C || SPI_MASTER)
	select REGMAP
	select BMP280_I2C if (I2C)
	select BMP280_SPI if (SPI_MASTER)
	help
	  Say yes here to build support for Bosch Sensortec BMP180 and BMP280
	  pressure and temperature sensors. Also supports the BME280 with
	  an additional humidity sensor channel.

	  To compile this driver as a module, choose M here: the core module
	  will be called bmp280 and you will also get bmp280-i2c for I2C
	  and/or bmp280-spi for SPI support.

config BMP280_I2C
	tristate
	depends on BMP280
	depends on I2C
	select REGMAP_I2C

config BMP280_SPI
	tristate
	depends on BMP280
	depends on SPI_MASTER
	select REGMAP

config IIO_CROS_EC_BARO
	tristate "ChromeOS EC Barometer Sensor"
	depends on IIO_CROS_EC_SENSORS_CORE
	help
	  Say yes here to build support for the Barometer sensor when
	  presented by the ChromeOS EC Sensor hub.

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

config DLHL60D
	tristate "All Sensors DLHL60D and DLHL60G low voltage digital pressure sensors"
	depends on I2C
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	help
	  Say yes here to build support for the All Sensors DLH series
	  pressure sensors driver.

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

config DPS310
	tristate "Infineon DPS310 pressure and temperature sensor"
	depends on I2C
	select REGMAP_I2C
	help
	  Support for the Infineon DPS310 digital barometric pressure sensor.
	  It can be accessed over I2C bus.

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

config HID_SENSOR_PRESS
	depends on HID_SENSOR_HUB
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	select HID_SENSOR_IIO_COMMON
	select HID_SENSOR_IIO_TRIGGER
	tristate "HID PRESS"
	help
	  Say yes here to build support for the HID SENSOR
	  Pressure driver

	  To compile this driver as a module, choose M here: the module
	  will be called hid-sensor-press.

config HP03
	tristate "Hope RF HP03 temperature and pressure sensor driver"
	depends on I2C
	select REGMAP_I2C
	help
	  Say yes here to build support for Hope RF HP03 pressure and
	  temperature sensor.

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

config ICP10100
	tristate "InvenSense ICP-101xx pressure and temperature sensor"
	depends on I2C
	select CRC8
	help
	  Say yes here to build support for InvenSense ICP-101xx barometric
	  pressure and temperature sensor.

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

config MPL115
	tristate

config MPL115_I2C
	tristate "Freescale MPL115A2 pressure sensor driver"
	depends on I2C
	select MPL115
	help
	  Say yes here to build support for the Freescale MPL115A2
	  pressure sensor connected via I2C.

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

config MPL115_SPI
	tristate "Freescale MPL115A1 pressure sensor driver"
	depends on SPI_MASTER
	select MPL115
	help
	  Say yes here to build support for the Freescale MPL115A1
	  pressure sensor connected via SPI.

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

config MPL3115
	tristate "Freescale MPL3115A2 pressure sensor driver"
	depends on I2C
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	help
	  Say yes here to build support for the Freescale MPL3115A2
	  pressure sensor / altimeter.

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

config MS5611
	tristate "Measurement Specialties MS5611 pressure sensor driver"
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	help
	  Say Y here to build support for the Measurement Specialties
	  MS5611, MS5607 pressure and temperature sensors.

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

config MS5611_I2C
	tristate "support I2C bus connection"
	depends on I2C && MS5611
	help
	  Say Y here to build I2C bus support for MS5611.

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

config MS5611_SPI
	tristate "support SPI bus connection"
	depends on SPI_MASTER && MS5611
	help
	  Say Y here to build SPI bus support for MS5611.

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

config MS5637
	tristate "Measurement Specialties MS5637 pressure & temperature sensor"
	depends on I2C
	select IIO_MS_SENSORS_I2C
	help
	  If you say yes here you get support for the Measurement Specialties
	  MS5637 pressure 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 ms5637.

config IIO_ST_PRESS
	tristate "STMicroelectronics pressure sensor Driver"
	depends on (I2C || SPI_MASTER) && SYSFS
	select IIO_ST_SENSORS_CORE
	select IIO_ST_PRESS_I2C if (I2C)
	select IIO_ST_PRESS_SPI if (SPI_MASTER)
	select IIO_TRIGGERED_BUFFER if (IIO_BUFFER)
	help
	  Say yes here to build support for STMicroelectronics pressure
	  sensors: LPS001WP, LPS25H, LPS331AP, LPS22HB, LPS22HH.

	  This driver can also be built as a module. If so, these modules
	  will be created:
	  - st_pressure (core functions for the driver [it is mandatory]);
	  - st_pressure_i2c (necessary for the I2C devices [optional*]);
	  - st_pressure_spi (necessary for the SPI devices [optional*]);

	  (*) one of these is necessary to do something.

config IIO_ST_PRESS_I2C
	tristate
	depends on IIO_ST_PRESS
	depends on IIO_ST_SENSORS_I2C

config IIO_ST_PRESS_SPI
	tristate
	depends on IIO_ST_PRESS
	depends on IIO_ST_SENSORS_SPI

config T5403
	tristate "EPCOS T5403 digital barometric pressure sensor driver"
	depends on I2C
	help
	  Say yes here to build support for the EPCOS T5403 pressure sensor
	  connected via I2C.

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

config HP206C
	tristate "HOPERF HP206C precision barometer and altimeter sensor"
	depends on I2C
	help
	  Say yes here to build support for the HOPREF HP206C precision
	  barometer and altimeter sensor.

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

config ZPA2326
	tristate "Murata ZPA2326 pressure sensor driver"
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	select REGMAP
	select ZPA2326_I2C if I2C
	select ZPA2326_SPI if SPI_MASTER
	help
	  Say Y here to build support for the Murata ZPA2326 pressure and
	  temperature sensor.

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

config ZPA2326_I2C
	tristate
	select REGMAP_I2C

config ZPA2326_SPI
	tristate
	select REGMAP_SPI

endmenu
