drivers/rtc/rtc-s3c.c: fix incorrect way of save/restore of S3C2410_TICNT for TYPE_S3C64XX
On exynos5250, exynos5420 and exynos5260 it was observed that, after 1 cycle of S2R, the rtc-tick occurs at a very fast rate as compared to the rtc-tick occuring before S2R. This patch fixes the above issue by correcting the wrong way of save/restore of S3C2410_TICNT for TYPE_S3C64XX. Signed-off-by: Vikas Sajjan <vikas.sajjan@samsung.com> Cc: Grant Likely <grant.likely@linaro.org> Cc: Rob Herring <robh+dt@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
0f55159d09
commit
40d2d968e9
1 changed files with 12 additions and 5 deletions
|
@ -580,10 +580,12 @@ static int s3c_rtc_suspend(struct device *dev)
|
|||
|
||||
clk_enable(rtc_clk);
|
||||
/* save TICNT for anyone using periodic interrupts */
|
||||
ticnt_save = readb(s3c_rtc_base + S3C2410_TICNT);
|
||||
if (s3c_rtc_cpu_type == TYPE_S3C64XX) {
|
||||
ticnt_en_save = readw(s3c_rtc_base + S3C2410_RTCCON);
|
||||
ticnt_en_save &= S3C64XX_RTCCON_TICEN;
|
||||
ticnt_save = readl(s3c_rtc_base + S3C2410_TICNT);
|
||||
} else {
|
||||
ticnt_save = readb(s3c_rtc_base + S3C2410_TICNT);
|
||||
}
|
||||
s3c_rtc_enable(pdev, 0);
|
||||
|
||||
|
@ -605,10 +607,15 @@ static int s3c_rtc_resume(struct device *dev)
|
|||
|
||||
clk_enable(rtc_clk);
|
||||
s3c_rtc_enable(pdev, 1);
|
||||
writeb(ticnt_save, s3c_rtc_base + S3C2410_TICNT);
|
||||
if (s3c_rtc_cpu_type == TYPE_S3C64XX && ticnt_en_save) {
|
||||
tmp = readw(s3c_rtc_base + S3C2410_RTCCON);
|
||||
writew(tmp | ticnt_en_save, s3c_rtc_base + S3C2410_RTCCON);
|
||||
if (s3c_rtc_cpu_type == TYPE_S3C64XX) {
|
||||
writel(ticnt_save, s3c_rtc_base + S3C2410_TICNT);
|
||||
if (ticnt_en_save) {
|
||||
tmp = readw(s3c_rtc_base + S3C2410_RTCCON);
|
||||
writew(tmp | ticnt_en_save,
|
||||
s3c_rtc_base + S3C2410_RTCCON);
|
||||
}
|
||||
} else {
|
||||
writeb(ticnt_save, s3c_rtc_base + S3C2410_TICNT);
|
||||
}
|
||||
|
||||
if (device_may_wakeup(dev) && wake_en) {
|
||||
|
|
Loading…
Reference in a new issue