Skip to content

Commit 32b41f9

Browse files
rtc: mrst: switch to devm functions
Switch to devm managed functions to simplify error handling and device removal Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
1 parent 29615d0 commit 32b41f9

File tree

1 file changed

+18
-27
lines changed

1 file changed

+18
-27
lines changed

drivers/rtc/rtc-mrst.c

Lines changed: 18 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@ struct mrst_rtc {
4545
struct rtc_device *rtc;
4646
struct device *dev;
4747
int irq;
48-
struct resource *iomem;
4948

5049
u8 enabled_wake;
5150
u8 suspend_ctrl;
@@ -329,24 +328,22 @@ static int vrtc_mrst_do_probe(struct device *dev, struct resource *iomem,
329328
if (!iomem)
330329
return -ENODEV;
331330

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);
334333
if (!iomem) {
335334
dev_dbg(dev, "i/o mem already in use.\n");
336335
return -EBUSY;
337336
}
338337

339338
mrst_rtc.irq = rtc_irq;
340-
mrst_rtc.iomem = iomem;
341339
mrst_rtc.dev = dev;
342340
dev_set_drvdata(dev, &mrst_rtc);
343341

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;
350347

351348
rename_region(iomem, dev_name(&mrst_rtc.rtc->dev));
352349

@@ -359,23 +356,27 @@ static int vrtc_mrst_do_probe(struct device *dev, struct resource *iomem,
359356
dev_dbg(dev, "TODO: support more than 24-hr BCD mode\n");
360357

361358
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);
365362
if (retval < 0) {
366363
dev_dbg(dev, "IRQ %d is already in use, err %d\n",
367364
rtc_irq, retval);
368-
goto cleanup1;
365+
goto cleanup0;
369366
}
370367
}
368+
369+
retval = rtc_register_device(mrst_rtc.rtc);
370+
if (retval) {
371+
retval = PTR_ERR(mrst_rtc.rtc);
372+
goto cleanup0;
373+
}
374+
371375
dev_dbg(dev, "initialised\n");
372376
return 0;
373377

374-
cleanup1:
375-
rtc_device_unregister(mrst_rtc.rtc);
376378
cleanup0:
377379
mrst_rtc.dev = NULL;
378-
release_mem_region(iomem->start, resource_size(iomem));
379380
dev_err(dev, "rtc-mrst: unable to initialise\n");
380381
return retval;
381382
}
@@ -390,20 +391,10 @@ static void rtc_mrst_do_shutdown(void)
390391
static void rtc_mrst_do_remove(struct device *dev)
391392
{
392393
struct mrst_rtc *mrst = dev_get_drvdata(dev);
393-
struct resource *iomem;
394394

395395
rtc_mrst_do_shutdown();
396396

397-
if (mrst->irq)
398-
free_irq(mrst->irq, mrst->rtc);
399-
400-
rtc_device_unregister(mrst->rtc);
401397
mrst->rtc = NULL;
402-
403-
iomem = mrst->iomem;
404-
release_mem_region(iomem->start, resource_size(iomem));
405-
mrst->iomem = NULL;
406-
407398
mrst->dev = NULL;
408399
}
409400

0 commit comments

Comments
 (0)