Commit d64132ac0083d97f0a8b63f3c1759b2e9b5ed7b1

Authored by Sachin Kamat
Committed by Linus Torvalds
1 parent 3087b3d090

drivers/rtc/rtc-at32ap700x.c: use devm_* APIs

devm_* functions are device managed and make cleanup code simpler.

Signed-off-by: Sachin Kamat <sachin.kamat@linaro.org>
Cc: Hans-Christian Egtvedt <hcegtvedt@atmel.com>
Cc: Jingoo Han <jg1.han@samsung.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

Showing 1 changed file with 9 additions and 18 deletions Side-by-side Diff

drivers/rtc/rtc-at32ap700x.c
... ... @@ -202,7 +202,8 @@
202 202 int irq;
203 203 int ret;
204 204  
205   - rtc = kzalloc(sizeof(struct rtc_at32ap700x), GFP_KERNEL);
  205 + rtc = devm_kzalloc(&pdev->dev, sizeof(struct rtc_at32ap700x),
  206 + GFP_KERNEL);
206 207 if (!rtc) {
207 208 dev_dbg(&pdev->dev, "out of memory\n");
208 209 return -ENOMEM;
... ... @@ -223,7 +224,7 @@
223 224 }
224 225  
225 226 rtc->irq = irq;
226   - rtc->regs = ioremap(regs->start, resource_size(regs));
  227 + rtc->regs = devm_ioremap(&pdev->dev, regs->start, resource_size(regs));
227 228 if (!rtc->regs) {
228 229 ret = -ENOMEM;
229 230 dev_dbg(&pdev->dev, "could not map I/O memory\n");
230 231  
231 232  
232 233  
... ... @@ -244,20 +245,21 @@
244 245 | RTC_BIT(CTRL_EN));
245 246 }
246 247  
247   - ret = request_irq(irq, at32_rtc_interrupt, IRQF_SHARED, "rtc", rtc);
  248 + ret = devm_request_irq(&pdev->dev, irq, at32_rtc_interrupt, IRQF_SHARED,
  249 + "rtc", rtc);
248 250 if (ret) {
249 251 dev_dbg(&pdev->dev, "could not request irq %d\n", irq);
250   - goto out_iounmap;
  252 + goto out;
251 253 }
252 254  
253 255 platform_set_drvdata(pdev, rtc);
254 256  
255   - rtc->rtc = rtc_device_register(pdev->name, &pdev->dev,
  257 + rtc->rtc = devm_rtc_device_register(&pdev->dev, pdev->name,
256 258 &at32_rtc_ops, THIS_MODULE);
257 259 if (IS_ERR(rtc->rtc)) {
258 260 dev_dbg(&pdev->dev, "could not register rtc device\n");
259 261 ret = PTR_ERR(rtc->rtc);
260   - goto out_free_irq;
  262 + goto out;
261 263 }
262 264  
263 265 device_init_wakeup(&pdev->dev, 1);
264 266  
265 267  
266 268  
... ... @@ -267,26 +269,15 @@
267 269  
268 270 return 0;
269 271  
270   -out_free_irq:
271   - platform_set_drvdata(pdev, NULL);
272   - free_irq(irq, rtc);
273   -out_iounmap:
274   - iounmap(rtc->regs);
275 272 out:
276   - kfree(rtc);
  273 + platform_set_drvdata(pdev, NULL);
277 274 return ret;
278 275 }
279 276  
280 277 static int __exit at32_rtc_remove(struct platform_device *pdev)
281 278 {
282   - struct rtc_at32ap700x *rtc = platform_get_drvdata(pdev);
283   -
284 279 device_init_wakeup(&pdev->dev, 0);
285 280  
286   - free_irq(rtc->irq, rtc);
287   - iounmap(rtc->regs);
288   - rtc_device_unregister(rtc->rtc);
289   - kfree(rtc);
290 281 platform_set_drvdata(pdev, NULL);
291 282  
292 283 return 0;