@@ -187,6 +187,13 @@ static int pl172_parse_cs_config(struct amba_device *adev,
187
187
return - EINVAL ;
188
188
}
189
189
190
+ static void pl172_amba_release_regions (void * data )
191
+ {
192
+ struct amba_device * adev = data ;
193
+
194
+ amba_release_regions (adev );
195
+ }
196
+
190
197
static const char * const pl172_revisions [] = {"r1" , "r2" , "r2p3" , "r2p4" };
191
198
static const char * const pl175_revisions [] = {"r1" };
192
199
static const char * const pl176_revisions [] = {"r0" };
@@ -232,13 +239,14 @@ static int pl172_probe(struct amba_device *adev, const struct amba_id *id)
232
239
return ret ;
233
240
}
234
241
242
+ ret = devm_add_action_or_reset (dev , pl172_amba_release_regions , adev );
243
+ if (ret )
244
+ return ret ;
245
+
235
246
pl172 -> base = devm_ioremap (dev , adev -> res .start ,
236
247
resource_size (& adev -> res ));
237
- if (!pl172 -> base ) {
238
- dev_err (dev , "ioremap failed\n" );
239
- ret = - ENOMEM ;
240
- goto err_no_ioremap ;
241
- }
248
+ if (!pl172 -> base )
249
+ return dev_err_probe (dev , - ENOMEM , "ioremap failed\n" );
242
250
243
251
amba_set_drvdata (adev , pl172 );
244
252
@@ -256,15 +264,6 @@ static int pl172_probe(struct amba_device *adev, const struct amba_id *id)
256
264
}
257
265
258
266
return 0 ;
259
-
260
- err_no_ioremap :
261
- amba_release_regions (adev );
262
- return ret ;
263
- }
264
-
265
- static void pl172_remove (struct amba_device * adev )
266
- {
267
- amba_release_regions (adev );
268
267
}
269
268
270
269
static const struct amba_id pl172_ids [] = {
@@ -292,7 +291,6 @@ static struct amba_driver pl172_driver = {
292
291
.name = "memory-pl172" ,
293
292
},
294
293
.probe = pl172_probe ,
295
- .remove = pl172_remove ,
296
294
.id_table = pl172_ids ,
297
295
};
298
296
module_amba_driver (pl172_driver );
0 commit comments