Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+12 −15
Original line number Diff line number Diff line
@@ -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,
	}
};