mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-04-01 03:44:08 +00:00
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: Jingoo Han <jg1.han@samsung.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
04ebc35973
commit
5936fdb9b2
1 changed files with 12 additions and 15 deletions
|
@ -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)
|
||||||
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)
|
||||||
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,
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue