Skip to content

Commit 4bb3166

Browse files
pedrobgennarijic23
authored andcommitted
iio: light: iqs621-als: use lock guards
Use guard(mutex)() for handling mutex lock instead of manually locking and unlocking the mutex. This prevents forgotten locks due to early exits and removes the need of gotos. Signed-off-by: Pedro Barletta Gennari <pedro.pbg@usp.br> Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com> Signed-off-by: Jonathan Cameron <jic23@kernel.org>
1 parent 484f68c commit 4bb3166

1 file changed

Lines changed: 31 additions & 62 deletions

File tree

drivers/iio/light/iqs621-als.c

Lines changed: 31 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
* Copyright (C) 2019 Jeff LaBundy <jeff@labundy.com>
66
*/
77

8+
#include <linux/cleanup.h>
89
#include <linux/device.h>
910
#include <linux/iio/events.h>
1011
#include <linux/iio/iio.h>
@@ -107,26 +108,20 @@ static int iqs621_als_notifier(struct notifier_block *notifier,
107108
indio_dev = iqs621_als->indio_dev;
108109
timestamp = iio_get_time_ns(indio_dev);
109110

110-
mutex_lock(&iqs621_als->lock);
111+
guard(mutex)(&iqs621_als->lock);
111112

112113
if (event_flags & BIT(IQS62X_EVENT_SYS_RESET)) {
113114
ret = iqs621_als_init(iqs621_als);
114115
if (ret) {
115116
dev_err(indio_dev->dev.parent,
116117
"Failed to re-initialize device: %d\n", ret);
117-
ret = NOTIFY_BAD;
118-
} else {
119-
ret = NOTIFY_OK;
118+
return NOTIFY_BAD;
120119
}
121-
122-
goto err_mutex;
120+
return NOTIFY_OK;
123121
}
124122

125-
if (!iqs621_als->light_en && !iqs621_als->range_en &&
126-
!iqs621_als->prox_en) {
127-
ret = NOTIFY_DONE;
128-
goto err_mutex;
129-
}
123+
if (!iqs621_als->light_en && !iqs621_als->range_en && !iqs621_als->prox_en)
124+
return NOTIFY_DONE;
130125

131126
/* IQS621 only */
132127
light_new = event_data->als_flags & IQS621_ALS_FLAGS_LIGHT;
@@ -181,12 +176,7 @@ static int iqs621_als_notifier(struct notifier_block *notifier,
181176

182177
iqs621_als->als_flags = event_data->als_flags;
183178
iqs621_als->ir_flags = event_data->ir_flags;
184-
ret = NOTIFY_OK;
185-
186-
err_mutex:
187-
mutex_unlock(&iqs621_als->lock);
188-
189-
return ret;
179+
return NOTIFY_OK;
190180
}
191181

192182
static void iqs621_als_notifier_unregister(void *context)
@@ -241,30 +231,22 @@ static int iqs621_als_read_event_config(struct iio_dev *indio_dev,
241231
enum iio_event_direction dir)
242232
{
243233
struct iqs621_als_private *iqs621_als = iio_priv(indio_dev);
244-
int ret;
245234

246-
mutex_lock(&iqs621_als->lock);
235+
guard(mutex)(&iqs621_als->lock);
247236

248237
switch (chan->type) {
249238
case IIO_LIGHT:
250-
ret = iqs621_als->light_en;
251-
break;
239+
return iqs621_als->light_en;
252240

253241
case IIO_INTENSITY:
254-
ret = iqs621_als->range_en;
255-
break;
242+
return iqs621_als->range_en;
256243

257244
case IIO_PROXIMITY:
258-
ret = iqs621_als->prox_en;
259-
break;
245+
return iqs621_als->prox_en;
260246

261247
default:
262-
ret = -EINVAL;
248+
return -EINVAL;
263249
}
264-
265-
mutex_unlock(&iqs621_als->lock);
266-
267-
return ret;
268250
}
269251

270252
static int iqs621_als_write_event_config(struct iio_dev *indio_dev,
@@ -278,11 +260,11 @@ static int iqs621_als_write_event_config(struct iio_dev *indio_dev,
278260
unsigned int val;
279261
int ret;
280262

281-
mutex_lock(&iqs621_als->lock);
263+
guard(mutex)(&iqs621_als->lock);
282264

283265
ret = regmap_read(iqs62x->regmap, iqs62x->dev_desc->als_flags, &val);
284266
if (ret)
285-
goto err_mutex;
267+
return ret;
286268
iqs621_als->als_flags = val;
287269

288270
switch (chan->type) {
@@ -293,7 +275,7 @@ static int iqs621_als_write_event_config(struct iio_dev *indio_dev,
293275
0xFF);
294276
if (!ret)
295277
iqs621_als->light_en = state;
296-
break;
278+
return ret;
297279

298280
case IIO_INTENSITY:
299281
ret = regmap_update_bits(iqs62x->regmap, IQS620_GLBL_EVENT_MASK,
@@ -302,29 +284,24 @@ static int iqs621_als_write_event_config(struct iio_dev *indio_dev,
302284
0xFF);
303285
if (!ret)
304286
iqs621_als->range_en = state;
305-
break;
287+
return ret;
306288

307289
case IIO_PROXIMITY:
308290
ret = regmap_read(iqs62x->regmap, IQS622_IR_FLAGS, &val);
309291
if (ret)
310-
goto err_mutex;
292+
return ret;
311293
iqs621_als->ir_flags = val;
312294

313295
ret = regmap_update_bits(iqs62x->regmap, IQS620_GLBL_EVENT_MASK,
314296
iqs62x->dev_desc->ir_mask,
315297
state ? 0 : 0xFF);
316298
if (!ret)
317299
iqs621_als->prox_en = state;
318-
break;
300+
return ret;
319301

320302
default:
321-
ret = -EINVAL;
303+
return -EINVAL;
322304
}
323-
324-
err_mutex:
325-
mutex_unlock(&iqs621_als->lock);
326-
327-
return ret;
328305
}
329306

330307
static int iqs621_als_read_event_value(struct iio_dev *indio_dev,
@@ -335,33 +312,28 @@ static int iqs621_als_read_event_value(struct iio_dev *indio_dev,
335312
int *val, int *val2)
336313
{
337314
struct iqs621_als_private *iqs621_als = iio_priv(indio_dev);
338-
int ret = IIO_VAL_INT;
339315

340-
mutex_lock(&iqs621_als->lock);
316+
guard(mutex)(&iqs621_als->lock);
341317

342318
switch (dir) {
343319
case IIO_EV_DIR_RISING:
344320
*val = iqs621_als->thresh_light * 16;
345-
break;
321+
return IIO_VAL_INT;
346322

347323
case IIO_EV_DIR_FALLING:
348324
*val = iqs621_als->thresh_dark * 4;
349-
break;
325+
return IIO_VAL_INT;
350326

351327
case IIO_EV_DIR_EITHER:
352328
if (iqs621_als->ir_flags_mask == IQS622_IR_FLAGS_TOUCH)
353329
*val = iqs621_als->thresh_prox * 4;
354330
else
355331
*val = iqs621_als->thresh_prox;
356-
break;
332+
return IIO_VAL_INT;
357333

358334
default:
359-
ret = -EINVAL;
335+
return -EINVAL;
360336
}
361-
362-
mutex_unlock(&iqs621_als->lock);
363-
364-
return ret;
365337
}
366338

367339
static int iqs621_als_write_event_value(struct iio_dev *indio_dev,
@@ -375,9 +347,9 @@ static int iqs621_als_write_event_value(struct iio_dev *indio_dev,
375347
struct iqs62x_core *iqs62x = iqs621_als->iqs62x;
376348
unsigned int thresh_reg, thresh_val;
377349
u8 ir_flags_mask, *thresh_cache;
378-
int ret = -EINVAL;
350+
int ret;
379351

380-
mutex_lock(&iqs621_als->lock);
352+
guard(mutex)(&iqs621_als->lock);
381353

382354
switch (dir) {
383355
case IIO_EV_DIR_RISING:
@@ -426,30 +398,27 @@ static int iqs621_als_write_event_value(struct iio_dev *indio_dev,
426398
break;
427399

428400
default:
429-
goto err_mutex;
401+
return -EINVAL;
430402
}
431403

432404
thresh_cache = &iqs621_als->thresh_prox;
433405
break;
434406

435407
default:
436-
goto err_mutex;
408+
return -EINVAL;
437409
}
438410

439411
if (thresh_val > 0xFF)
440-
goto err_mutex;
412+
return -EINVAL;
441413

442414
ret = regmap_write(iqs62x->regmap, thresh_reg, thresh_val);
443415
if (ret)
444-
goto err_mutex;
416+
return ret;
445417

446418
*thresh_cache = thresh_val;
447419
iqs621_als->ir_flags_mask = ir_flags_mask;
448420

449-
err_mutex:
450-
mutex_unlock(&iqs621_als->lock);
451-
452-
return ret;
421+
return 0;
453422
}
454423

455424
static const struct iio_info iqs621_als_info = {

0 commit comments

Comments
 (0)