@@ -293,19 +293,15 @@ EXPORT_SYMBOL_GPL(pwm_adjust_config);
293
293
int pwm_capture (struct pwm_device * pwm , struct pwm_capture * result ,
294
294
unsigned long timeout )
295
295
{
296
- int err ;
297
-
298
296
if (!pwm || !pwm -> chip -> ops )
299
297
return - EINVAL ;
300
298
301
299
if (!pwm -> chip -> ops -> capture )
302
300
return - ENOSYS ;
303
301
304
- mutex_lock (& pwm_lock );
305
- err = pwm -> chip -> ops -> capture (pwm -> chip , pwm , result , timeout );
306
- mutex_unlock (& pwm_lock );
302
+ guard (mutex )(& pwm_lock );
307
303
308
- return err ;
304
+ return pwm -> chip -> ops -> capture ( pwm -> chip , pwm , result , timeout ) ;
309
305
}
310
306
EXPORT_SYMBOL_GPL (pwm_capture );
311
307
@@ -317,19 +313,15 @@ static struct pwm_chip *pwmchip_find_by_name(const char *name)
317
313
if (!name )
318
314
return NULL ;
319
315
320
- mutex_lock (& pwm_lock );
316
+ guard ( mutex ) (& pwm_lock );
321
317
322
318
idr_for_each_entry_ul (& pwm_chips , chip , tmp , id ) {
323
319
const char * chip_name = dev_name (pwmchip_parent (chip ));
324
320
325
- if (chip_name && strcmp (chip_name , name ) == 0 ) {
326
- mutex_unlock (& pwm_lock );
321
+ if (chip_name && strcmp (chip_name , name ) == 0 )
327
322
return chip ;
328
- }
329
323
}
330
324
331
- mutex_unlock (& pwm_lock );
332
-
333
325
return NULL ;
334
326
}
335
327
@@ -406,14 +398,14 @@ static struct pwm_device *pwm_request_from_chip(struct pwm_chip *chip,
406
398
if (!chip || index >= chip -> npwm )
407
399
return ERR_PTR (- EINVAL );
408
400
409
- mutex_lock (& pwm_lock );
401
+ guard (mutex )(& pwm_lock );
402
+
410
403
pwm = & chip -> pwms [index ];
411
404
412
405
err = pwm_device_request (pwm , label );
413
406
if (err < 0 )
414
- pwm = ERR_PTR (err );
407
+ return ERR_PTR (err );
415
408
416
- mutex_unlock (& pwm_lock );
417
409
return pwm ;
418
410
}
419
411
@@ -1102,11 +1094,11 @@ int __pwmchip_add(struct pwm_chip *chip, struct module *owner)
1102
1094
1103
1095
chip -> owner = owner ;
1104
1096
1105
- mutex_lock (& pwm_lock );
1097
+ guard ( mutex ) (& pwm_lock );
1106
1098
1107
1099
ret = idr_alloc (& pwm_chips , chip , 0 , 0 , GFP_KERNEL );
1108
1100
if (ret < 0 )
1109
- goto err_idr_alloc ;
1101
+ return ret ;
1110
1102
1111
1103
chip -> id = ret ;
1112
1104
@@ -1119,18 +1111,13 @@ int __pwmchip_add(struct pwm_chip *chip, struct module *owner)
1119
1111
if (ret )
1120
1112
goto err_device_add ;
1121
1113
1122
- mutex_unlock (& pwm_lock );
1123
-
1124
1114
return 0 ;
1125
1115
1126
1116
err_device_add :
1127
1117
if (IS_ENABLED (CONFIG_OF ))
1128
1118
of_pwmchip_remove (chip );
1129
1119
1130
1120
idr_remove (& pwm_chips , chip -> id );
1131
- err_idr_alloc :
1132
-
1133
- mutex_unlock (& pwm_lock );
1134
1121
1135
1122
return ret ;
1136
1123
}
@@ -1149,11 +1136,8 @@ void pwmchip_remove(struct pwm_chip *chip)
1149
1136
if (IS_ENABLED (CONFIG_OF ))
1150
1137
of_pwmchip_remove (chip );
1151
1138
1152
- mutex_lock (& pwm_lock );
1153
-
1154
- idr_remove (& pwm_chips , chip -> id );
1155
-
1156
- mutex_unlock (& pwm_lock );
1139
+ scoped_guard (mutex , & pwm_lock )
1140
+ idr_remove (& pwm_chips , chip -> id );
1157
1141
1158
1142
device_del (& chip -> dev );
1159
1143
}
@@ -1209,15 +1193,11 @@ static struct pwm_chip *fwnode_to_pwmchip(struct fwnode_handle *fwnode)
1209
1193
struct pwm_chip * chip ;
1210
1194
unsigned long id , tmp ;
1211
1195
1212
- mutex_lock (& pwm_lock );
1196
+ guard ( mutex ) (& pwm_lock );
1213
1197
1214
1198
idr_for_each_entry_ul (& pwm_chips , chip , tmp , id )
1215
- if (pwmchip_parent (chip ) && device_match_fwnode (pwmchip_parent (chip ), fwnode )) {
1216
- mutex_unlock (& pwm_lock );
1199
+ if (pwmchip_parent (chip ) && device_match_fwnode (pwmchip_parent (chip ), fwnode ))
1217
1200
return chip ;
1218
- }
1219
-
1220
- mutex_unlock (& pwm_lock );
1221
1201
1222
1202
return ERR_PTR (- EPROBE_DEFER );
1223
1203
}
@@ -1532,11 +1512,11 @@ void pwm_put(struct pwm_device *pwm)
1532
1512
1533
1513
chip = pwm -> chip ;
1534
1514
1535
- mutex_lock (& pwm_lock );
1515
+ guard ( mutex ) (& pwm_lock );
1536
1516
1537
1517
if (!test_and_clear_bit (PWMF_REQUESTED , & pwm -> flags )) {
1538
1518
pr_warn ("PWM device already freed\n" );
1539
- goto out ;
1519
+ return ;
1540
1520
}
1541
1521
1542
1522
if (chip -> ops -> free )
@@ -1547,8 +1527,6 @@ void pwm_put(struct pwm_device *pwm)
1547
1527
put_device (& chip -> dev );
1548
1528
1549
1529
module_put (chip -> owner );
1550
- out :
1551
- mutex_unlock (& pwm_lock );
1552
1530
}
1553
1531
EXPORT_SYMBOL_GPL (pwm_put );
1554
1532
0 commit comments