aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVlad Dogaru <vlad.dogaru@intel.com>2015-06-30 07:20:58 -0400
committerJonathan Cameron <jic23@kernel.org>2015-07-19 06:48:15 -0400
commit498adaeb898c4eff190d598799bd9b0d607ce051 (patch)
treeb4926606100d5a91993177e63cdc4a80d2a0acfe
parentc99389ad3d80eeef0d0980a17e07f41822bda687 (diff)
iio: sx9500: rework error handling of raw readings
Fix error handling so that we can power the chip down even if a raw read fails. Reported-by: Hartmut Knaack <knaack.h@gmx.de> Signed-off-by: Vlad Dogaru <vlad.dogaru@intel.com> Acked-by: Hartmut Knaack <knaack.h@gmx.de> Signed-off-by: Jonathan Cameron <jic23@kernel.org>
-rw-r--r--drivers/iio/proximity/sx9500.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/drivers/iio/proximity/sx9500.c b/drivers/iio/proximity/sx9500.c
index 01494cd6fa32..21eaa167a784 100644
--- a/drivers/iio/proximity/sx9500.c
+++ b/drivers/iio/proximity/sx9500.c
@@ -329,27 +329,29 @@ static int sx9500_read_proximity(struct sx9500_data *data,
329 else 329 else
330 ret = sx9500_wait_for_sample(data); 330 ret = sx9500_wait_for_sample(data);
331 331
332 if (ret < 0)
333 return ret;
334
335 mutex_lock(&data->mutex); 332 mutex_lock(&data->mutex);
336 333
337 ret = sx9500_read_prox_data(data, chan, val);
338 if (ret < 0) 334 if (ret < 0)
339 goto out; 335 goto out_dec_data_rdy;
340 336
341 ret = sx9500_dec_chan_users(data, chan->channel); 337 ret = sx9500_read_prox_data(data, chan, val);
342 if (ret < 0) 338 if (ret < 0)
343 goto out; 339 goto out_dec_data_rdy;
344 340
345 ret = sx9500_dec_data_rdy_users(data); 341 ret = sx9500_dec_data_rdy_users(data);
346 if (ret < 0) 342 if (ret < 0)
343 goto out_dec_chan;
344
345 ret = sx9500_dec_chan_users(data, chan->channel);
346 if (ret < 0)
347 goto out; 347 goto out;
348 348
349 ret = IIO_VAL_INT; 349 ret = IIO_VAL_INT;
350 350
351 goto out; 351 goto out;
352 352
353out_dec_data_rdy:
354 sx9500_dec_data_rdy_users(data);
353out_dec_chan: 355out_dec_chan:
354 sx9500_dec_chan_users(data, chan->channel); 356 sx9500_dec_chan_users(data, chan->channel);
355out: 357out: