summaryrefslogtreecommitdiff
path: root/drivers/iio/light/tcs3472.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2014-07-12 14:11:09 -0700
committerLinus Torvalds <torvalds@linux-foundation.org>2014-07-12 14:11:09 -0700
commit303f8ad1c5f4bed903a62f4afdbd2b252e2a1270 (patch)
treedae3acb9a9c3c146f9e8adbd06fc7666823cebc6 /drivers/iio/light/tcs3472.c
parent3a57cc5f1935d824c36264e0fa888d7d6a9038c0 (diff)
parentbdac8ca90e07edde8bbef5396784f7011e6e5b8d (diff)
Merge tag 'staging-3.16-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging
Pull IIO fixes from Greg KH: "Here are some IIO driver fixes for 3.16-rc5. Nothing major, just resolves some minor issues that have been reported" * tag 'staging-3.16-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging: iio: ti_am335x_adc: Fix: Use same step id at FIFOs both ends iio:tcs3472: Check for buffer enabled and locking iio: hid-sensor-prox: Fix return values iio: hid-sensor-gyro-3d: Fix return values iio: hid-sensor-als: Fix return values iio: hid-sensor-magn-3d: Fix return values iio: hid-sensor-accel-3d: Fix return values iio: hid-sensor-press: Fix return values
Diffstat (limited to 'drivers/iio/light/tcs3472.c')
-rw-r--r--drivers/iio/light/tcs3472.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/drivers/iio/light/tcs3472.c b/drivers/iio/light/tcs3472.c
index fe063a0a21cd..752569985d1d 100644
--- a/drivers/iio/light/tcs3472.c
+++ b/drivers/iio/light/tcs3472.c
@@ -52,6 +52,7 @@
struct tcs3472_data {
struct i2c_client *client;
+ struct mutex lock;
u8 enable;
u8 control;
u8 atime;
@@ -116,10 +117,17 @@ static int tcs3472_read_raw(struct iio_dev *indio_dev,
switch (mask) {
case IIO_CHAN_INFO_RAW:
+ if (iio_buffer_enabled(indio_dev))
+ return -EBUSY;
+
+ mutex_lock(&data->lock);
ret = tcs3472_req_data(data);
- if (ret < 0)
+ if (ret < 0) {
+ mutex_unlock(&data->lock);
return ret;
+ }
ret = i2c_smbus_read_word_data(data->client, chan->address);
+ mutex_unlock(&data->lock);
if (ret < 0)
return ret;
*val = ret;
@@ -255,6 +263,7 @@ static int tcs3472_probe(struct i2c_client *client,
data = iio_priv(indio_dev);
i2c_set_clientdata(client, indio_dev);
data->client = client;
+ mutex_init(&data->lock);
indio_dev->dev.parent = &client->dev;
indio_dev->info = &tcs3472_info;