Browse files

drivers/misc: support for the pressure sensor BMP085 from Bosch Senso…


This driver adds support for the BMP085 digital pressure sensor from Bosch
Sensortec.  It exposes a sysfs api to userspace where pressure and
temperature measurement results can be read from the pressure0_input and
temp0_input file.  The chip is able to calculate the average of up to
eight samples to increase the accuracy.  This feature can be controlled by
writing to the oversampling file.

The BMP085 digital pressure sensor can measure ambient air pressure and
temperature.  Both values can be obtained from sysfs files.  The pressure
is measured by reading from pressure0_input.  Valid values range from
30000 to 110000 pascal with a resolution of 1 pascal (=0.01 millibar).

temp0_input holds the current temperature in degree celsius, multiplied by
10.  This results in a resolution of a tenth degree celsius.  Values range
from -400 to 850.

To increase the accuracy, this chip can calculate the average of 1, 2, 4
or 8 samples.  This behavior is controlled through the oversampling sysfs
file.  Two to the power of the value written to that file specifies how
many samples will be used.  Valid values: 0..3.

[ fix typo]
[ optimize the wait time for the pressure sensor, definition of long is arch dependent so make it u32]
[ coding-style fixes]
Signed-off-by: Christoph Mair <>
Signed-off-by: Shubhrajyoti D <>
Acked-by: Jonathan Cameron <>
Cc: Stefan Schmidt <>
Signed-off-by: Andrew Morton <>
Signed-off-by: Linus Torvalds <>
  • Loading branch information...
cmair authored and torvalds committed Aug 10, 2010
1 parent cdf8afc commit 5bf1d290b57e392eaf4bfb15c67f315fce4140be
Showing with 524 additions and 0 deletions.
  1. +31 −0 Documentation/ABI/testing/sysfs-i2c-bmp085
  2. +10 −0 drivers/misc/Kconfig
  3. +1 −0 drivers/misc/Makefile
  4. +482 −0 drivers/misc/bmp085.c
@@ -0,0 +1,31 @@
+What: /sys/bus/i2c/devices/<busnum>-<devaddr>/pressure0_input
+Date: June 2010
+Contact: Christoph Mair <>
+Description: Start a pressure measurement and read the result. Values
+ represent the ambient air pressure in pascal (0.01 millibar).
+ Reading: returns the current air pressure.
+What: /sys/bus/i2c/devices/<busnum>-<devaddr>/temp0_input
+Date: June 2010
+Contact: Christoph Mair <>
+Description: Measure the ambient temperature. The returned value represents
+ the ambient temperature in units of 0.1 degree celsius.
+ Reading: returns the current temperature.
+What: /sys/bus/i2c/devices/<busnum>-<devaddr>/oversampling
+Date: June 2010
+Contact: Christoph Mair <>
+Description: Tell the bmp085 to use more samples to calculate a pressure
+ value. When writing to this file the chip will use 2^x samples
+ to calculate the next pressure value with x being the value
+ written. Using this feature will decrease RMS noise and
+ increase the measurement time.
+ Reading: returns the current oversampling setting.
+ Writing: sets a new oversampling setting.
+ Accepted values: 0..3.
@@ -373,6 +373,16 @@ config ARM_CHARLCD
line and the Linux version on the second line, but that's
still useful.
+config BMP085
+ tristate "BMP085 digital pressure sensor"
+ depends on I2C && SYSFS
+ help
+ If you say yes here you get support for the Bosch Sensortec
+ BMP086 digital pressure sensor.
+ To compile this driver as a module, choose M here: the
+ module will be called bmp085.
source "drivers/misc/c2port/Kconfig"
source "drivers/misc/eeprom/Kconfig"
source "drivers/misc/cb710/Kconfig"
@@ -9,6 +9,7 @@ obj-$(CONFIG_AD525X_DPOT_SPI) += ad525x_dpot-spi.o
obj-$(CONFIG_ATMEL_PWM) += atmel_pwm.o
obj-$(CONFIG_ATMEL_SSC) += atmel-ssc.o
obj-$(CONFIG_ATMEL_TCLIB) += atmel_tclib.o
+obj-$(CONFIG_BMP085) += bmp085.o
obj-$(CONFIG_ICS932S401) += ics932s401.o
obj-$(CONFIG_LKDTM) += lkdtm.o
obj-$(CONFIG_TIFM_CORE) += tifm_core.o
Oops, something went wrong.

0 comments on commit 5bf1d29

Please sign in to comment.