diff options
author | NeilBrown <neilb@suse.de> | 2013-02-15 11:30:13 +1100 |
---|---|---|
committer | Denis 'GNUtoo' Carikli <GNUtoo@no-log.org> | 2013-03-09 14:51:25 +0100 |
commit | a97aa856829b371638fef27c26eb7507b434347f (patch) | |
tree | 08fffe37ea7f91aa4eda1583b03c982aa90004a0 | |
parent | 6a5c65c7c444ef008da5a253bb78c8aa3233591f (diff) | |
download | kernel_goldelico_gta04-a97aa856829b371638fef27c26eb7507b434347f.zip kernel_goldelico_gta04-a97aa856829b371638fef27c26eb7507b434347f.tar.gz kernel_goldelico_gta04-a97aa856829b371638fef27c26eb7507b434347f.tar.bz2 |
BMP085 - use mutex to avoid races.
Signed-off-by: NeilBrown <neilb@suse.de>
-rw-r--r-- | drivers/misc/bmp085.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/misc/bmp085.c b/drivers/misc/bmp085.c index 768ee14..18f138c 100644 --- a/drivers/misc/bmp085.c +++ b/drivers/misc/bmp085.c @@ -66,7 +66,7 @@ #define BMP085_CONVERSION_REGISTER_MSB 0xF6 #define BMP085_CONVERSION_REGISTER_LSB 0xF7 #define BMP085_CONVERSION_REGISTER_XLSB 0xF8 -#define BMP085_TEMP_CONVERSION_TIME 5 +#define BMP085_TEMP_CONVERSION_TIME 8 struct bmp085_calibration_data { s16 AC1, AC2, AC3; @@ -206,12 +206,14 @@ static s32 bmp085_get_temperature(struct bmp085_data *data, int *temperature) if (status < 0) goto exit; + mutex_lock(&data->lock); x1 = ((data->raw_temperature - cali->AC6) * cali->AC5) >> 15; x2 = (cali->MC << 11) / (x1 + cali->MD); data->b6 = x1 + x2 - 4000; /* if NULL just update b6. Used for pressure only measurements */ if (temperature != NULL) *temperature = (x1+x2+8) >> 4; + mutex_unlock(&data->lock); exit: return status; @@ -245,6 +247,7 @@ static s32 bmp085_get_pressure(struct bmp085_data *data, int *pressure) if (status < 0) return status; + mutex_lock(&data->lock); x1 = (data->b6 * data->b6) >> 12; x1 *= cali->B2; x1 >>= 11; @@ -272,6 +275,7 @@ static s32 bmp085_get_pressure(struct bmp085_data *data, int *pressure) x2 = (-7357 * p) >> 16; p += (x1 + x2 + 3791) >> 4; + mutex_unlock(&data->lock); *pressure = p; return 0; |