summaryrefslogtreecommitdiffstats
path: root/drivers/iio/accel/kxcjk-1013.c
diff options
context:
space:
mode:
authorSrinivas Pandruvada <srinivas.pandruvada@linux.intel.com>2014-06-16 20:00:00 +0100
committerJonathan Cameron <jic23@kernel.org>2014-06-16 20:57:36 +0100
commit88f6da779a37a3579e580296776ba86d6c6bd980 (patch)
tree04a5b42f213d57db90743d1898d23ff62ab39396 /drivers/iio/accel/kxcjk-1013.c
parentd14c0f10e71c174cc312fb77832450bd02171be5 (diff)
downloadlinux-stable-88f6da779a37a3579e580296776ba86d6c6bd980.tar.gz
linux-stable-88f6da779a37a3579e580296776ba86d6c6bd980.tar.bz2
linux-stable-88f6da779a37a3579e580296776ba86d6c6bd980.zip
iio: accel: kxcjk1013 Fix missing unlock errors
Fix unlock at two places. One when i2c error occurs and other when trigger set state when raw read is in progress. kbuild test robot errors: >> >> drivers/iio/accel/kxcjk-1013.c:531:3-9: preceding lock on line 524 >> >> drivers/iio/accel/kxcjk-1013.c:376:4-10: preceding lock on line 368 Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com> Reported-by: Fengguang Wu <fengguang.wu@intel.com> Signed-off-by: Jonathan Cameron <jic23@kernel.org>
Diffstat (limited to 'drivers/iio/accel/kxcjk-1013.c')
-rw-r--r--drivers/iio/accel/kxcjk-1013.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/drivers/iio/accel/kxcjk-1013.c b/drivers/iio/accel/kxcjk-1013.c
index 2326e430c999..72a6dbbc18d1 100644
--- a/drivers/iio/accel/kxcjk-1013.c
+++ b/drivers/iio/accel/kxcjk-1013.c
@@ -372,8 +372,10 @@ static int kxcjk1013_read_raw(struct iio_dev *indio_dev,
int sleep_val;
ret = kxcjk1013_set_mode(data, OPERATION);
- if (ret < 0)
+ if (ret < 0) {
+ mutex_unlock(&data->mutex);
return ret;
+ }
++data->power_state;
sleep_val = kxcjk1013_get_startup_times(data);
if (sleep_val < 20000)
@@ -527,8 +529,10 @@ static int kxcjk1013_data_rdy_trigger_set_state(struct iio_trigger *trig,
kxcjk1013_set_mode(data, OPERATION);
++data->power_state;
} else {
- if (--data->power_state)
+ if (--data->power_state) {
+ mutex_unlock(&data->mutex);
return 0;
+ }
kxcjk1013_chip_setup_interrupt(data, false);
kxcjk1013_set_mode(data, STANDBY);
}