diff options
author | Alexandre Belloni <alexandre.belloni@bootlin.com> | 2019-04-30 05:28:19 -0400 |
---|---|---|
committer | Alexandre Belloni <alexandre.belloni@bootlin.com> | 2019-04-30 05:50:20 -0400 |
commit | 3b2dc19ff9a1495cf08752b5a1ba8b986473f39f (patch) | |
tree | 501756bf8b35fe93dea170a2d1913f0180062bde | |
parent | e72746e7912300ca48c427c3614569fcddd2e7f0 (diff) |
rtc: jz4740: use dev_pm_set_wake_irq() to simplify code
Use dev_pm_set_wake_irq() to set the RTC as a wakeup source for suspend.
This allows to remove the whole dev_pm_ops structure.
Tested-by: Mathieu Malaterre <malat@debian.org>
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
-rw-r--r-- | drivers/rtc/rtc-jz4740.c | 37 |
1 files changed, 7 insertions, 30 deletions
diff --git a/drivers/rtc/rtc-jz4740.c b/drivers/rtc/rtc-jz4740.c index 077670ffde01..32e6b6270efd 100644 --- a/drivers/rtc/rtc-jz4740.c +++ b/drivers/rtc/rtc-jz4740.c | |||
@@ -20,6 +20,7 @@ | |||
20 | #include <linux/module.h> | 20 | #include <linux/module.h> |
21 | #include <linux/of_device.h> | 21 | #include <linux/of_device.h> |
22 | #include <linux/platform_device.h> | 22 | #include <linux/platform_device.h> |
23 | #include <linux/pm_wakeirq.h> | ||
23 | #include <linux/reboot.h> | 24 | #include <linux/reboot.h> |
24 | #include <linux/rtc.h> | 25 | #include <linux/rtc.h> |
25 | #include <linux/slab.h> | 26 | #include <linux/slab.h> |
@@ -346,6 +347,12 @@ static int jz4740_rtc_probe(struct platform_device *pdev) | |||
346 | 347 | ||
347 | device_init_wakeup(&pdev->dev, 1); | 348 | device_init_wakeup(&pdev->dev, 1); |
348 | 349 | ||
350 | ret = dev_pm_set_wake_irq(&pdev->dev, rtc->irq); | ||
351 | if (ret) { | ||
352 | dev_err(&pdev->dev, "Failed to set wake irq: %d\n", ret); | ||
353 | return ret; | ||
354 | } | ||
355 | |||
349 | rtc->rtc = devm_rtc_allocate_device(&pdev->dev); | 356 | rtc->rtc = devm_rtc_allocate_device(&pdev->dev); |
350 | if (IS_ERR(rtc->rtc)) { | 357 | if (IS_ERR(rtc->rtc)) { |
351 | ret = PTR_ERR(rtc->rtc); | 358 | ret = PTR_ERR(rtc->rtc); |
@@ -403,35 +410,6 @@ static int jz4740_rtc_probe(struct platform_device *pdev) | |||
403 | return 0; | 410 | return 0; |
404 | } | 411 | } |
405 | 412 | ||
406 | #ifdef CONFIG_PM | ||
407 | static int jz4740_rtc_suspend(struct device *dev) | ||
408 | { | ||
409 | struct jz4740_rtc *rtc = dev_get_drvdata(dev); | ||
410 | |||
411 | if (device_may_wakeup(dev)) | ||
412 | enable_irq_wake(rtc->irq); | ||
413 | return 0; | ||
414 | } | ||
415 | |||
416 | static int jz4740_rtc_resume(struct device *dev) | ||
417 | { | ||
418 | struct jz4740_rtc *rtc = dev_get_drvdata(dev); | ||
419 | |||
420 | if (device_may_wakeup(dev)) | ||
421 | disable_irq_wake(rtc->irq); | ||
422 | return 0; | ||
423 | } | ||
424 | |||
425 | static const struct dev_pm_ops jz4740_pm_ops = { | ||
426 | .suspend = jz4740_rtc_suspend, | ||
427 | .resume = jz4740_rtc_resume, | ||
428 | }; | ||
429 | #define JZ4740_RTC_PM_OPS (&jz4740_pm_ops) | ||
430 | |||
431 | #else | ||
432 | #define JZ4740_RTC_PM_OPS NULL | ||
433 | #endif /* CONFIG_PM */ | ||
434 | |||
435 | static const struct platform_device_id jz4740_rtc_ids[] = { | 413 | static const struct platform_device_id jz4740_rtc_ids[] = { |
436 | { "jz4740-rtc", ID_JZ4740 }, | 414 | { "jz4740-rtc", ID_JZ4740 }, |
437 | { "jz4780-rtc", ID_JZ4780 }, | 415 | { "jz4780-rtc", ID_JZ4780 }, |
@@ -443,7 +421,6 @@ static struct platform_driver jz4740_rtc_driver = { | |||
443 | .probe = jz4740_rtc_probe, | 421 | .probe = jz4740_rtc_probe, |
444 | .driver = { | 422 | .driver = { |
445 | .name = "jz4740-rtc", | 423 | .name = "jz4740-rtc", |
446 | .pm = JZ4740_RTC_PM_OPS, | ||
447 | .of_match_table = of_match_ptr(jz4740_rtc_of_match), | 424 | .of_match_table = of_match_ptr(jz4740_rtc_of_match), |
448 | }, | 425 | }, |
449 | .id_table = jz4740_rtc_ids, | 426 | .id_table = jz4740_rtc_ids, |