diff options
Diffstat (limited to 'drivers/rtc/rtc-palmas.c')
-rw-r--r-- | drivers/rtc/rtc-palmas.c | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/drivers/rtc/rtc-palmas.c b/drivers/rtc/rtc-palmas.c index 59c42986254e..50204d474eb7 100644 --- a/drivers/rtc/rtc-palmas.c +++ b/drivers/rtc/rtc-palmas.c | |||
@@ -30,6 +30,7 @@ | |||
30 | #include <linux/kernel.h> | 30 | #include <linux/kernel.h> |
31 | #include <linux/mfd/palmas.h> | 31 | #include <linux/mfd/palmas.h> |
32 | #include <linux/module.h> | 32 | #include <linux/module.h> |
33 | #include <linux/of.h> | ||
33 | #include <linux/rtc.h> | 34 | #include <linux/rtc.h> |
34 | #include <linux/types.h> | 35 | #include <linux/types.h> |
35 | #include <linux/platform_device.h> | 36 | #include <linux/platform_device.h> |
@@ -264,7 +265,7 @@ static int palmas_rtc_probe(struct platform_device *pdev) | |||
264 | 265 | ||
265 | palmas_rtc->irq = platform_get_irq(pdev, 0); | 266 | palmas_rtc->irq = platform_get_irq(pdev, 0); |
266 | 267 | ||
267 | palmas_rtc->rtc = rtc_device_register(pdev->name, &pdev->dev, | 268 | palmas_rtc->rtc = devm_rtc_device_register(&pdev->dev, pdev->name, |
268 | &palmas_rtc_ops, THIS_MODULE); | 269 | &palmas_rtc_ops, THIS_MODULE); |
269 | if (IS_ERR(palmas_rtc->rtc)) { | 270 | if (IS_ERR(palmas_rtc->rtc)) { |
270 | ret = PTR_ERR(palmas_rtc->rtc); | 271 | ret = PTR_ERR(palmas_rtc->rtc); |
@@ -272,14 +273,13 @@ static int palmas_rtc_probe(struct platform_device *pdev) | |||
272 | return ret; | 273 | return ret; |
273 | } | 274 | } |
274 | 275 | ||
275 | ret = request_threaded_irq(palmas_rtc->irq, NULL, | 276 | ret = devm_request_threaded_irq(&pdev->dev, palmas_rtc->irq, NULL, |
276 | palmas_rtc_interrupt, | 277 | palmas_rtc_interrupt, |
277 | IRQF_TRIGGER_LOW | IRQF_ONESHOT | | 278 | IRQF_TRIGGER_LOW | IRQF_ONESHOT | |
278 | IRQF_EARLY_RESUME, | 279 | IRQF_EARLY_RESUME, |
279 | dev_name(&pdev->dev), palmas_rtc); | 280 | dev_name(&pdev->dev), palmas_rtc); |
280 | if (ret < 0) { | 281 | if (ret < 0) { |
281 | dev_err(&pdev->dev, "IRQ request failed, err = %d\n", ret); | 282 | dev_err(&pdev->dev, "IRQ request failed, err = %d\n", ret); |
282 | rtc_device_unregister(palmas_rtc->rtc); | ||
283 | return ret; | 283 | return ret; |
284 | } | 284 | } |
285 | 285 | ||
@@ -289,11 +289,7 @@ static int palmas_rtc_probe(struct platform_device *pdev) | |||
289 | 289 | ||
290 | static int palmas_rtc_remove(struct platform_device *pdev) | 290 | static int palmas_rtc_remove(struct platform_device *pdev) |
291 | { | 291 | { |
292 | struct palmas_rtc *palmas_rtc = platform_get_drvdata(pdev); | ||
293 | |||
294 | palmas_rtc_alarm_irq_enable(&pdev->dev, 0); | 292 | palmas_rtc_alarm_irq_enable(&pdev->dev, 0); |
295 | free_irq(palmas_rtc->irq, palmas_rtc); | ||
296 | rtc_device_unregister(palmas_rtc->rtc); | ||
297 | return 0; | 293 | return 0; |
298 | } | 294 | } |
299 | 295 | ||
@@ -321,6 +317,14 @@ static const struct dev_pm_ops palmas_rtc_pm_ops = { | |||
321 | SET_SYSTEM_SLEEP_PM_OPS(palmas_rtc_suspend, palmas_rtc_resume) | 317 | SET_SYSTEM_SLEEP_PM_OPS(palmas_rtc_suspend, palmas_rtc_resume) |
322 | }; | 318 | }; |
323 | 319 | ||
320 | #ifdef CONFIG_OF | ||
321 | static struct of_device_id of_palmas_rtc_match[] = { | ||
322 | { .compatible = "ti,palmas-rtc"}, | ||
323 | { }, | ||
324 | }; | ||
325 | MODULE_DEVICE_TABLE(of, of_palmas_rtc_match); | ||
326 | #endif | ||
327 | |||
324 | static struct platform_driver palmas_rtc_driver = { | 328 | static struct platform_driver palmas_rtc_driver = { |
325 | .probe = palmas_rtc_probe, | 329 | .probe = palmas_rtc_probe, |
326 | .remove = palmas_rtc_remove, | 330 | .remove = palmas_rtc_remove, |
@@ -328,6 +332,7 @@ static struct platform_driver palmas_rtc_driver = { | |||
328 | .owner = THIS_MODULE, | 332 | .owner = THIS_MODULE, |
329 | .name = "palmas-rtc", | 333 | .name = "palmas-rtc", |
330 | .pm = &palmas_rtc_pm_ops, | 334 | .pm = &palmas_rtc_pm_ops, |
335 | .of_match_table = of_match_ptr(of_palmas_rtc_match), | ||
331 | }, | 336 | }, |
332 | }; | 337 | }; |
333 | 338 | ||