#
# Pressure drivers
#
# When adding new entries keep the list in alphabetical order

menu "Pressure sensors"

config BMP280
	tristate "Bosch Sensortec BMP280 pressure sensor driver"
	depends on I2C
	select REGMAP_I2C
	help
	 Say yes here to build support for Bosch Sensortec BMP280
	 pressure and temperature sensor.

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

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 MPL115
	tristate "Freescale MPL115A2 pressure sensor driver"
	depends on I2C
	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.

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 Specialities MS5611 pressure sensor driver"
	help
	  Say Y here to build support for the Measurement Specialities
	  MS5611 pressure and temperature sensor.

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

	  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.

endmenu
