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
192182static 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
270252static 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
330307static 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
367339static 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
455424static const struct iio_info iqs621_als_info = {
0 commit comments