@@ -45,7 +45,6 @@ struct mrst_rtc {
45
45
struct rtc_device * rtc ;
46
46
struct device * dev ;
47
47
int irq ;
48
- struct resource * iomem ;
49
48
50
49
u8 enabled_wake ;
51
50
u8 suspend_ctrl ;
@@ -329,24 +328,22 @@ static int vrtc_mrst_do_probe(struct device *dev, struct resource *iomem,
329
328
if (!iomem )
330
329
return - ENODEV ;
331
330
332
- iomem = request_mem_region ( iomem -> start , resource_size (iomem ),
333
- driver_name );
331
+ iomem = devm_request_mem_region ( dev , iomem -> start , resource_size (iomem ),
332
+ driver_name );
334
333
if (!iomem ) {
335
334
dev_dbg (dev , "i/o mem already in use.\n" );
336
335
return - EBUSY ;
337
336
}
338
337
339
338
mrst_rtc .irq = rtc_irq ;
340
- mrst_rtc .iomem = iomem ;
341
339
mrst_rtc .dev = dev ;
342
340
dev_set_drvdata (dev , & mrst_rtc );
343
341
344
- mrst_rtc .rtc = rtc_device_register (driver_name , dev ,
345
- & mrst_rtc_ops , THIS_MODULE );
346
- if (IS_ERR (mrst_rtc .rtc )) {
347
- retval = PTR_ERR (mrst_rtc .rtc );
348
- goto cleanup0 ;
349
- }
342
+ mrst_rtc .rtc = devm_rtc_allocate_device (dev );
343
+ if (IS_ERR (mrst_rtc .rtc ))
344
+ return PTR_ERR (mrst_rtc .rtc );
345
+
346
+ mrst_rtc .rtc -> ops = & mrst_rtc_ops ;
350
347
351
348
rename_region (iomem , dev_name (& mrst_rtc .rtc -> dev ));
352
349
@@ -359,23 +356,27 @@ static int vrtc_mrst_do_probe(struct device *dev, struct resource *iomem,
359
356
dev_dbg (dev , "TODO: support more than 24-hr BCD mode\n" );
360
357
361
358
if (rtc_irq ) {
362
- retval = request_irq ( rtc_irq , mrst_rtc_irq ,
363
- 0 , dev_name (& mrst_rtc .rtc -> dev ),
364
- mrst_rtc .rtc );
359
+ retval = devm_request_irq ( dev , rtc_irq , mrst_rtc_irq ,
360
+ 0 , dev_name (& mrst_rtc .rtc -> dev ),
361
+ mrst_rtc .rtc );
365
362
if (retval < 0 ) {
366
363
dev_dbg (dev , "IRQ %d is already in use, err %d\n" ,
367
364
rtc_irq , retval );
368
- goto cleanup1 ;
365
+ goto cleanup0 ;
369
366
}
370
367
}
368
+
369
+ retval = rtc_register_device (mrst_rtc .rtc );
370
+ if (retval ) {
371
+ retval = PTR_ERR (mrst_rtc .rtc );
372
+ goto cleanup0 ;
373
+ }
374
+
371
375
dev_dbg (dev , "initialised\n" );
372
376
return 0 ;
373
377
374
- cleanup1 :
375
- rtc_device_unregister (mrst_rtc .rtc );
376
378
cleanup0 :
377
379
mrst_rtc .dev = NULL ;
378
- release_mem_region (iomem -> start , resource_size (iomem ));
379
380
dev_err (dev , "rtc-mrst: unable to initialise\n" );
380
381
return retval ;
381
382
}
@@ -390,20 +391,10 @@ static void rtc_mrst_do_shutdown(void)
390
391
static void rtc_mrst_do_remove (struct device * dev )
391
392
{
392
393
struct mrst_rtc * mrst = dev_get_drvdata (dev );
393
- struct resource * iomem ;
394
394
395
395
rtc_mrst_do_shutdown ();
396
396
397
- if (mrst -> irq )
398
- free_irq (mrst -> irq , mrst -> rtc );
399
-
400
- rtc_device_unregister (mrst -> rtc );
401
397
mrst -> rtc = NULL ;
402
-
403
- iomem = mrst -> iomem ;
404
- release_mem_region (iomem -> start , resource_size (iomem ));
405
- mrst -> iomem = NULL ;
406
-
407
398
mrst -> dev = NULL ;
408
399
}
409
400
0 commit comments