Commit 5936fdb9 authored by Jingoo Han's avatar Jingoo Han Committed by Linus Torvalds

rtc: rtc-puv3: convert puv3_rtc_driver to dev_pm_ops

Instead of using legacy suspend/resume methods, using newer dev_pm_ops
structure allows better control over power management.
Signed-off-by: default avatarJingoo Han <jg1.han@samsung.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 04ebc359
...@@ -207,14 +207,14 @@ static const struct rtc_class_ops puv3_rtcops = { ...@@ -207,14 +207,14 @@ static const struct rtc_class_ops puv3_rtcops = {
.proc = puv3_rtc_proc, .proc = puv3_rtc_proc,
}; };
static void puv3_rtc_enable(struct platform_device *pdev, int en) static void puv3_rtc_enable(struct device *dev, int en)
{ {
if (!en) { if (!en) {
writel(readl(RTC_RTSR) & ~RTC_RTSR_HZE, RTC_RTSR); writel(readl(RTC_RTSR) & ~RTC_RTSR_HZE, RTC_RTSR);
} else { } else {
/* re-enable the device, and check it is ok */ /* re-enable the device, and check it is ok */
if ((readl(RTC_RTSR) & RTC_RTSR_HZE) == 0) { if ((readl(RTC_RTSR) & RTC_RTSR_HZE) == 0) {
dev_info(&pdev->dev, "rtc disabled, re-enabling\n"); dev_info(dev, "rtc disabled, re-enabling\n");
writel(readl(RTC_RTSR) | RTC_RTSR_HZE, RTC_RTSR); writel(readl(RTC_RTSR) | RTC_RTSR_HZE, RTC_RTSR);
} }
} }
...@@ -276,7 +276,7 @@ static int puv3_rtc_probe(struct platform_device *pdev) ...@@ -276,7 +276,7 @@ static int puv3_rtc_probe(struct platform_device *pdev)
goto err_nores; goto err_nores;
} }
puv3_rtc_enable(pdev, 1); puv3_rtc_enable(&pdev->dev, 1);
/* register RTC and exit */ /* register RTC and exit */
rtc = rtc_device_register("pkunity", &pdev->dev, &puv3_rtcops, rtc = rtc_device_register("pkunity", &pdev->dev, &puv3_rtcops,
...@@ -296,44 +296,41 @@ static int puv3_rtc_probe(struct platform_device *pdev) ...@@ -296,44 +296,41 @@ static int puv3_rtc_probe(struct platform_device *pdev)
return 0; return 0;
err_nortc: err_nortc:
puv3_rtc_enable(pdev, 0); puv3_rtc_enable(&pdev->dev, 0);
release_resource(puv3_rtc_mem); release_resource(puv3_rtc_mem);
err_nores: err_nores:
return ret; return ret;
} }
#ifdef CONFIG_PM #ifdef CONFIG_PM_SLEEP
static int ticnt_save; static int ticnt_save;
static int puv3_rtc_suspend(struct platform_device *pdev, pm_message_t state) static int puv3_rtc_suspend(struct device *dev)
{ {
/* save RTAR for anyone using periodic interrupts */ /* save RTAR for anyone using periodic interrupts */
ticnt_save = readl(RTC_RTAR); ticnt_save = readl(RTC_RTAR);
puv3_rtc_enable(pdev, 0); puv3_rtc_enable(dev, 0);
return 0; return 0;
} }
static int puv3_rtc_resume(struct platform_device *pdev) static int puv3_rtc_resume(struct device *dev)
{ {
puv3_rtc_enable(pdev, 1); puv3_rtc_enable(dev, 1);
writel(ticnt_save, RTC_RTAR); writel(ticnt_save, RTC_RTAR);
return 0; return 0;
} }
#else
#define puv3_rtc_suspend NULL
#define puv3_rtc_resume NULL
#endif #endif
static SIMPLE_DEV_PM_OPS(puv3_rtc_pm_ops, puv3_rtc_suspend, puv3_rtc_resume);
static struct platform_driver puv3_rtc_driver = { static struct platform_driver puv3_rtc_driver = {
.probe = puv3_rtc_probe, .probe = puv3_rtc_probe,
.remove = puv3_rtc_remove, .remove = puv3_rtc_remove,
.suspend = puv3_rtc_suspend,
.resume = puv3_rtc_resume,
.driver = { .driver = {
.name = "PKUnity-v3-RTC", .name = "PKUnity-v3-RTC",
.owner = THIS_MODULE, .owner = THIS_MODULE,
.pm = &puv3_rtc_pm_ops,
} }
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment