# 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 ROHM_BM1390
	tristate "ROHM BM1390GLV-Z pressure sensor driver"
	depends on I2C
	help
	  Support for the ROHM BM1390 pressure sensor. The BM1390GLV-Z
	  can measure pressures ranging from 300 hPa to 1300 hPa with
	  configurable measurement averaging and internal FIFO. The
	  sensor does also provide temperature measurements.

config BMP280
	tristate "Bosch Sensortec BMP180/BMP280/BMP380/BMP580 pressure sensor driver"
	depends on (I2C || SPI_MASTER)
	select REGMAP
	select BMP280_I2C if (I2C)
	select BMP280_SPI if (SPI_MASTER)
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	help
	  Say yes here to build support for Bosch Sensortec BMP180, BMP280, BMP380
	  and BMP580 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 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 HSC030PA
	tristate "Honeywell HSC/SSC TruStability pressure sensor series"
	depends on (I2C || SPI_MASTER)
	select HSC030PA_I2C if I2C
	select HSC030PA_SPI if SPI_MASTER
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	help
	  Say Y here to build support for the Honeywell TruStability
	  HSC and SSC pressure and temperature sensor series.

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

config HSC030PA_I2C
	tristate
	depends on HSC030PA
	depends on I2C

config HSC030PA_SPI
	tristate
	depends on HSC030PA
	depends on SPI_MASTER

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 MPRLS0025PA
	tristate "Honeywell MPRLS0025PA (MicroPressure sensors series)"
	depends on (I2C || SPI_MASTER)
	select MPRLS0025PA_I2C if I2C
	select MPRLS0025PA_SPI if SPI_MASTER
	select IIO_BUFFER
	select IIO_TRIGGERED_BUFFER
	help
	  Say Y here to build support for the Honeywell MicroPressure pressure
	  sensor series. There are many different types with different pressure
	  range. These ranges can be set up in the device tree.

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

config MPRLS0025PA_I2C
	tristate
	depends on MPRLS0025PA
	depends on I2C

config MPRLS0025PA_SPI
	tristate
	depends on MPRLS0025PA
	depends on SPI_MASTER

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 SDP500
	tristate "Sensirion SDP500 differential pressure sensor I2C driver"
	depends on I2C
	help
	  Say Y here to build support for Sensirion SDP500 differential pressure
	  sensor I2C driver.
	  To compile this driver as a module, choose M here: the core module
	  will be called sdp500.

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

	  Also need to enable at least one of I2C and SPI interface drivers
	  below.

config IIO_ST_PRESS_I2C
	tristate "STMicroelectronics pressure sensor I2C Interface"
	depends on I2C && IIO_ST_PRESS
	default I2C && IIO_ST_PRESS
	select IIO_ST_SENSORS_I2C
	help
	  Build support for STMicroelectronics pressure sensor I2C interface.

	  To compile this driver as a module, choose M here. The module
	  will be called st_pressure_i2c.

config IIO_ST_PRESS_SPI
	tristate "STMicroelectronics pressure sensor SPI Interface"
	depends on SPI_MASTER && IIO_ST_PRESS
	default SPI_MASTER && IIO_ST_PRESS
	select IIO_ST_SENSORS_SPI
	help
	  Build support for STMicroelectronics pressure sensor SPI interface.

	  To compile this driver as a module, choose M here. The module
	  will be called st_pressure_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
