rtc: rtc-puv3: convert puv3_rtc_driver to dev_pm_ops
Jingoo Han [Mon, 29 Apr 2013 23:21:02 +0000 (16:21 -0700)]
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>

drivers/rtc/rtc-puv3.c

index 0407e13..72f4371 100644 (file)
@@ -207,14 +207,14 @@ static const struct rtc_class_ops puv3_rtcops = {
        .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) {
                writel(readl(RTC_RTSR) & ~RTC_RTSR_HZE, RTC_RTSR);
        } else {
                /* re-enable the device, and check it is ok */
                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);
                }
        }
@@ -276,7 +276,7 @@ static int puv3_rtc_probe(struct platform_device *pdev)
                goto err_nores;
        }
 
-       puv3_rtc_enable(pdev, 1);
+       puv3_rtc_enable(&pdev->dev, 1);
 
        /* register RTC and exit */
        rtc = rtc_device_register("pkunity", &pdev->dev, &puv3_rtcops,
@@ -296,44 +296,41 @@ static int puv3_rtc_probe(struct platform_device *pdev)
        return 0;
 
  err_nortc:
-       puv3_rtc_enable(pdev, 0);
+       puv3_rtc_enable(&pdev->dev, 0);
        release_resource(puv3_rtc_mem);
 
  err_nores:
        return ret;
 }
 
-#ifdef CONFIG_PM
-
+#ifdef CONFIG_PM_SLEEP
 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 */
        ticnt_save = readl(RTC_RTAR);
-       puv3_rtc_enable(pdev, 0);
+       puv3_rtc_enable(dev, 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);
        return 0;
 }
-#else
-#define puv3_rtc_suspend NULL
-#define puv3_rtc_resume  NULL
 #endif
 
+static SIMPLE_DEV_PM_OPS(puv3_rtc_pm_ops, puv3_rtc_suspend, puv3_rtc_resume);
+
 static struct platform_driver puv3_rtc_driver = {
        .probe          = puv3_rtc_probe,
        .remove         = puv3_rtc_remove,
-       .suspend        = puv3_rtc_suspend,
-       .resume         = puv3_rtc_resume,
        .driver         = {
                .name   = "PKUnity-v3-RTC",
                .owner  = THIS_MODULE,
+               .pm     = &puv3_rtc_pm_ops,
        }
 };