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 20:27:44 +0100 |
commit | 37b07de942da77c173ed2fb37f6b03492f93007d (patch) | |
tree | 51501fd288d72b9caa09373e7f141c625d205ddc | |
parent | 8247b4ecdd81bd500740757250a371ea902ea720 (diff) | |
download | kernel_goldelico_gta04-37b07de942da77c173ed2fb37f6b03492f93007d.zip kernel_goldelico_gta04-37b07de942da77c173ed2fb37f6b03492f93007d.tar.gz kernel_goldelico_gta04-37b07de942da77c173ed2fb37f6b03492f93007d.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 229f4ca..634bc71 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; |