diff options
Diffstat (limited to 'drivers/rtc/rtc-ds1286.c')
-rw-r--r-- | drivers/rtc/rtc-ds1286.c | 49 |
1 files changed, 10 insertions, 39 deletions
diff --git a/drivers/rtc/rtc-ds1286.c b/drivers/rtc/rtc-ds1286.c index d989412a348a..398c96a98fc4 100644 --- a/drivers/rtc/rtc-ds1286.c +++ b/drivers/rtc/rtc-ds1286.c | |||
@@ -25,8 +25,6 @@ | |||
25 | struct ds1286_priv { | 25 | struct ds1286_priv { |
26 | struct rtc_device *rtc; | 26 | struct rtc_device *rtc; |
27 | u32 __iomem *rtcregs; | 27 | u32 __iomem *rtcregs; |
28 | size_t size; | ||
29 | unsigned long baseaddr; | ||
30 | spinlock_t lock; | 28 | spinlock_t lock; |
31 | }; | 29 | }; |
32 | 30 | ||
@@ -270,7 +268,6 @@ static int ds1286_set_time(struct device *dev, struct rtc_time *tm) | |||
270 | static int ds1286_read_alarm(struct device *dev, struct rtc_wkalrm *alm) | 268 | static int ds1286_read_alarm(struct device *dev, struct rtc_wkalrm *alm) |
271 | { | 269 | { |
272 | struct ds1286_priv *priv = dev_get_drvdata(dev); | 270 | struct ds1286_priv *priv = dev_get_drvdata(dev); |
273 | unsigned char cmd; | ||
274 | unsigned long flags; | 271 | unsigned long flags; |
275 | 272 | ||
276 | /* | 273 | /* |
@@ -281,7 +278,7 @@ static int ds1286_read_alarm(struct device *dev, struct rtc_wkalrm *alm) | |||
281 | alm->time.tm_min = ds1286_rtc_read(priv, RTC_MINUTES_ALARM) & 0x7f; | 278 | alm->time.tm_min = ds1286_rtc_read(priv, RTC_MINUTES_ALARM) & 0x7f; |
282 | alm->time.tm_hour = ds1286_rtc_read(priv, RTC_HOURS_ALARM) & 0x1f; | 279 | alm->time.tm_hour = ds1286_rtc_read(priv, RTC_HOURS_ALARM) & 0x1f; |
283 | alm->time.tm_wday = ds1286_rtc_read(priv, RTC_DAY_ALARM) & 0x07; | 280 | alm->time.tm_wday = ds1286_rtc_read(priv, RTC_DAY_ALARM) & 0x07; |
284 | cmd = ds1286_rtc_read(priv, RTC_CMD); | 281 | ds1286_rtc_read(priv, RTC_CMD); |
285 | spin_unlock_irqrestore(&priv->lock, flags); | 282 | spin_unlock_irqrestore(&priv->lock, flags); |
286 | 283 | ||
287 | alm->time.tm_min = bcd2bin(alm->time.tm_min); | 284 | alm->time.tm_min = bcd2bin(alm->time.tm_min); |
@@ -334,56 +331,30 @@ static int ds1286_probe(struct platform_device *pdev) | |||
334 | struct rtc_device *rtc; | 331 | struct rtc_device *rtc; |
335 | struct resource *res; | 332 | struct resource *res; |
336 | struct ds1286_priv *priv; | 333 | struct ds1286_priv *priv; |
337 | int ret = 0; | ||
338 | 334 | ||
339 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); | 335 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
340 | if (!res) | 336 | if (!res) |
341 | return -ENODEV; | 337 | return -ENODEV; |
342 | priv = kzalloc(sizeof(struct ds1286_priv), GFP_KERNEL); | 338 | priv = devm_kzalloc(&pdev->dev, sizeof(struct ds1286_priv), GFP_KERNEL); |
343 | if (!priv) | 339 | if (!priv) |
344 | return -ENOMEM; | 340 | return -ENOMEM; |
345 | 341 | ||
346 | priv->size = resource_size(res); | 342 | priv->rtcregs = devm_ioremap_resource(&pdev->dev, res); |
347 | if (!request_mem_region(res->start, priv->size, pdev->name)) { | 343 | if (IS_ERR(priv->rtcregs)) |
348 | ret = -EBUSY; | 344 | return PTR_ERR(priv->rtcregs); |
349 | goto out; | 345 | |
350 | } | ||
351 | priv->baseaddr = res->start; | ||
352 | priv->rtcregs = ioremap(priv->baseaddr, priv->size); | ||
353 | if (!priv->rtcregs) { | ||
354 | ret = -ENOMEM; | ||
355 | goto out; | ||
356 | } | ||
357 | spin_lock_init(&priv->lock); | 346 | spin_lock_init(&priv->lock); |
358 | platform_set_drvdata(pdev, priv); | 347 | platform_set_drvdata(pdev, priv); |
359 | rtc = rtc_device_register("ds1286", &pdev->dev, | 348 | rtc = devm_rtc_device_register(&pdev->dev, "ds1286", &ds1286_ops, |
360 | &ds1286_ops, THIS_MODULE); | 349 | THIS_MODULE); |
361 | if (IS_ERR(rtc)) { | 350 | if (IS_ERR(rtc)) |
362 | ret = PTR_ERR(rtc); | 351 | return PTR_ERR(rtc); |
363 | goto out; | ||
364 | } | ||
365 | priv->rtc = rtc; | 352 | priv->rtc = rtc; |
366 | return 0; | 353 | return 0; |
367 | |||
368 | out: | ||
369 | if (priv->rtc) | ||
370 | rtc_device_unregister(priv->rtc); | ||
371 | if (priv->rtcregs) | ||
372 | iounmap(priv->rtcregs); | ||
373 | if (priv->baseaddr) | ||
374 | release_mem_region(priv->baseaddr, priv->size); | ||
375 | kfree(priv); | ||
376 | return ret; | ||
377 | } | 354 | } |
378 | 355 | ||
379 | static int ds1286_remove(struct platform_device *pdev) | 356 | static int ds1286_remove(struct platform_device *pdev) |
380 | { | 357 | { |
381 | struct ds1286_priv *priv = platform_get_drvdata(pdev); | ||
382 | |||
383 | rtc_device_unregister(priv->rtc); | ||
384 | iounmap(priv->rtcregs); | ||
385 | release_mem_region(priv->baseaddr, priv->size); | ||
386 | kfree(priv); | ||
387 | return 0; | 358 | return 0; |
388 | } | 359 | } |
389 | 360 | ||