aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/rtc/rtc-palmas.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/rtc/rtc-palmas.c')
-rw-r--r--drivers/rtc/rtc-palmas.c19
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
290static int palmas_rtc_remove(struct platform_device *pdev) 290static 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
321static struct of_device_id of_palmas_rtc_match[] = {
322 { .compatible = "ti,palmas-rtc"},
323 { },
324};
325MODULE_DEVICE_TABLE(of, of_palmas_rtc_match);
326#endif
327
324static struct platform_driver palmas_rtc_driver = { 328static 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