diff options
author | Guo Zeng <guo.zeng@csr.com> | 2015-07-13 21:31:38 -0400 |
---|---|---|
committer | Alexandre Belloni <alexandre.belloni@free-electrons.com> | 2015-09-05 07:19:06 -0400 |
commit | dfe6c04aa289de06df95d888719af63d1d4c982d (patch) | |
tree | 01c4ea1188f799b8c9c5158bd39666781dd2c0ea | |
parent | f4a2eecb3ff9f51b179b213e7cc3766f920f2dc5 (diff) |
rtc: sirfsoc: move to regmap APIs from platform-specific APIs
The current codes use CSR platform specific API exported by machine
codes to read/write RTC registers. they are:
sirfsoc_rtc_iobrg_readl()
sirfsoc_rtc_iobrg_writel()
commit b1999477ed91 ("ARM: prima2: move to use REGMAP APIs for rtciobrg")
moves to regmap support, now we can move to use regmap APIs in RTC
driver.
Signed-off-by: Guo Zeng <guo.zeng@csr.com>
Signed-off-by: Barry Song <Baohua.Song@csr.com>
Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
-rw-r--r-- | drivers/rtc/rtc-sirfsoc.c | 107 |
1 files changed, 64 insertions, 43 deletions
diff --git a/drivers/rtc/rtc-sirfsoc.c b/drivers/rtc/rtc-sirfsoc.c index edc3b43282d4..7367f617145c 100644 --- a/drivers/rtc/rtc-sirfsoc.c +++ b/drivers/rtc/rtc-sirfsoc.c | |||
@@ -13,6 +13,7 @@ | |||
13 | #include <linux/slab.h> | 13 | #include <linux/slab.h> |
14 | #include <linux/io.h> | 14 | #include <linux/io.h> |
15 | #include <linux/of.h> | 15 | #include <linux/of.h> |
16 | #include <linux/regmap.h> | ||
16 | #include <linux/rtc/sirfsoc_rtciobrg.h> | 17 | #include <linux/rtc/sirfsoc_rtciobrg.h> |
17 | 18 | ||
18 | 19 | ||
@@ -48,12 +49,27 @@ struct sirfsoc_rtc_drv { | |||
48 | /* Overflow for every 8 years extra time */ | 49 | /* Overflow for every 8 years extra time */ |
49 | u32 overflow_rtc; | 50 | u32 overflow_rtc; |
50 | spinlock_t lock; | 51 | spinlock_t lock; |
52 | struct regmap *regmap; | ||
51 | #ifdef CONFIG_PM | 53 | #ifdef CONFIG_PM |
52 | u32 saved_counter; | 54 | u32 saved_counter; |
53 | u32 saved_overflow_rtc; | 55 | u32 saved_overflow_rtc; |
54 | #endif | 56 | #endif |
55 | }; | 57 | }; |
56 | 58 | ||
59 | static u32 sirfsoc_rtc_readl(struct sirfsoc_rtc_drv *rtcdrv, u32 offset) | ||
60 | { | ||
61 | u32 val; | ||
62 | |||
63 | regmap_read(rtcdrv->regmap, rtcdrv->rtc_base + offset, &val); | ||
64 | return val; | ||
65 | } | ||
66 | |||
67 | static void sirfsoc_rtc_writel(struct sirfsoc_rtc_drv *rtcdrv, | ||
68 | u32 offset, u32 val) | ||
69 | { | ||
70 | regmap_write(rtcdrv->regmap, rtcdrv->rtc_base + offset, val); | ||
71 | } | ||
72 | |||
57 | static int sirfsoc_rtc_read_alarm(struct device *dev, | 73 | static int sirfsoc_rtc_read_alarm(struct device *dev, |
58 | struct rtc_wkalrm *alrm) | 74 | struct rtc_wkalrm *alrm) |
59 | { | 75 | { |
@@ -64,9 +80,9 @@ static int sirfsoc_rtc_read_alarm(struct device *dev, | |||
64 | 80 | ||
65 | spin_lock_irq(&rtcdrv->lock); | 81 | spin_lock_irq(&rtcdrv->lock); |
66 | 82 | ||
67 | rtc_count = sirfsoc_rtc_iobrg_readl(rtcdrv->rtc_base + RTC_CN); | 83 | rtc_count = sirfsoc_rtc_readl(rtcdrv, RTC_CN); |
68 | 84 | ||
69 | rtc_alarm = sirfsoc_rtc_iobrg_readl(rtcdrv->rtc_base + RTC_ALARM0); | 85 | rtc_alarm = sirfsoc_rtc_readl(rtcdrv, RTC_ALARM0); |
70 | memset(alrm, 0, sizeof(struct rtc_wkalrm)); | 86 | memset(alrm, 0, sizeof(struct rtc_wkalrm)); |
71 | 87 | ||
72 | /* | 88 | /* |
@@ -82,8 +98,7 @@ static int sirfsoc_rtc_read_alarm(struct device *dev, | |||
82 | rtc_time_to_tm(rtcdrv->overflow_rtc | 98 | rtc_time_to_tm(rtcdrv->overflow_rtc |
83 | << (BITS_PER_LONG - RTC_SHIFT) | 99 | << (BITS_PER_LONG - RTC_SHIFT) |
84 | | rtc_alarm >> RTC_SHIFT, &(alrm->time)); | 100 | | rtc_alarm >> RTC_SHIFT, &(alrm->time)); |
85 | if (sirfsoc_rtc_iobrg_readl( | 101 | if (sirfsoc_rtc_readl(rtcdrv, RTC_STATUS) & SIRFSOC_RTC_AL0E) |
86 | rtcdrv->rtc_base + RTC_STATUS) & SIRFSOC_RTC_AL0E) | ||
87 | alrm->enabled = 1; | 102 | alrm->enabled = 1; |
88 | 103 | ||
89 | spin_unlock_irq(&rtcdrv->lock); | 104 | spin_unlock_irq(&rtcdrv->lock); |
@@ -103,8 +118,7 @@ static int sirfsoc_rtc_set_alarm(struct device *dev, | |||
103 | 118 | ||
104 | spin_lock_irq(&rtcdrv->lock); | 119 | spin_lock_irq(&rtcdrv->lock); |
105 | 120 | ||
106 | rtc_status_reg = sirfsoc_rtc_iobrg_readl( | 121 | rtc_status_reg = sirfsoc_rtc_readl(rtcdrv, RTC_STATUS); |
107 | rtcdrv->rtc_base + RTC_STATUS); | ||
108 | if (rtc_status_reg & SIRFSOC_RTC_AL0E) { | 122 | if (rtc_status_reg & SIRFSOC_RTC_AL0E) { |
109 | /* | 123 | /* |
110 | * An ongoing alarm in progress - ingore it and not | 124 | * An ongoing alarm in progress - ingore it and not |
@@ -113,8 +127,7 @@ static int sirfsoc_rtc_set_alarm(struct device *dev, | |||
113 | dev_info(dev, "An old alarm was set, will be replaced by a new one\n"); | 127 | dev_info(dev, "An old alarm was set, will be replaced by a new one\n"); |
114 | } | 128 | } |
115 | 129 | ||
116 | sirfsoc_rtc_iobrg_writel( | 130 | sirfsoc_rtc_writel(rtcdrv, RTC_ALARM0, rtc_alarm << RTC_SHIFT); |
117 | rtc_alarm << RTC_SHIFT, rtcdrv->rtc_base + RTC_ALARM0); | ||
118 | rtc_status_reg &= ~0x07; /* mask out the lower status bits */ | 131 | rtc_status_reg &= ~0x07; /* mask out the lower status bits */ |
119 | /* | 132 | /* |
120 | * This bit RTC_AL sets it as a wake-up source for Sleep Mode | 133 | * This bit RTC_AL sets it as a wake-up source for Sleep Mode |
@@ -123,8 +136,7 @@ static int sirfsoc_rtc_set_alarm(struct device *dev, | |||
123 | rtc_status_reg |= SIRFSOC_RTC_AL0; | 136 | rtc_status_reg |= SIRFSOC_RTC_AL0; |
124 | /* enable the RTC alarm interrupt */ | 137 | /* enable the RTC alarm interrupt */ |
125 | rtc_status_reg |= SIRFSOC_RTC_AL0E; | 138 | rtc_status_reg |= SIRFSOC_RTC_AL0E; |
126 | sirfsoc_rtc_iobrg_writel( | 139 | sirfsoc_rtc_writel(rtcdrv, RTC_STATUS, rtc_status_reg); |
127 | rtc_status_reg, rtcdrv->rtc_base + RTC_STATUS); | ||
128 | 140 | ||
129 | spin_unlock_irq(&rtcdrv->lock); | 141 | spin_unlock_irq(&rtcdrv->lock); |
130 | } else { | 142 | } else { |
@@ -135,8 +147,7 @@ static int sirfsoc_rtc_set_alarm(struct device *dev, | |||
135 | */ | 147 | */ |
136 | spin_lock_irq(&rtcdrv->lock); | 148 | spin_lock_irq(&rtcdrv->lock); |
137 | 149 | ||
138 | rtc_status_reg = sirfsoc_rtc_iobrg_readl( | 150 | rtc_status_reg = sirfsoc_rtc_readl(rtcdrv, RTC_STATUS); |
139 | rtcdrv->rtc_base + RTC_STATUS); | ||
140 | if (rtc_status_reg & SIRFSOC_RTC_AL0E) { | 151 | if (rtc_status_reg & SIRFSOC_RTC_AL0E) { |
141 | /* clear the RTC status register's alarm bit */ | 152 | /* clear the RTC status register's alarm bit */ |
142 | rtc_status_reg &= ~0x07; | 153 | rtc_status_reg &= ~0x07; |
@@ -145,8 +156,8 @@ static int sirfsoc_rtc_set_alarm(struct device *dev, | |||
145 | /* Clear the Alarm enable bit */ | 156 | /* Clear the Alarm enable bit */ |
146 | rtc_status_reg &= ~(SIRFSOC_RTC_AL0E); | 157 | rtc_status_reg &= ~(SIRFSOC_RTC_AL0E); |
147 | 158 | ||
148 | sirfsoc_rtc_iobrg_writel(rtc_status_reg, | 159 | sirfsoc_rtc_writel(rtcdrv, RTC_STATUS, |
149 | rtcdrv->rtc_base + RTC_STATUS); | 160 | rtc_status_reg); |
150 | } | 161 | } |
151 | 162 | ||
152 | spin_unlock_irq(&rtcdrv->lock); | 163 | spin_unlock_irq(&rtcdrv->lock); |
@@ -167,9 +178,9 @@ static int sirfsoc_rtc_read_time(struct device *dev, | |||
167 | * fail, read several times to make sure get stable value. | 178 | * fail, read several times to make sure get stable value. |
168 | */ | 179 | */ |
169 | do { | 180 | do { |
170 | tmp_rtc = sirfsoc_rtc_iobrg_readl(rtcdrv->rtc_base + RTC_CN); | 181 | tmp_rtc = sirfsoc_rtc_readl(rtcdrv, RTC_CN); |
171 | cpu_relax(); | 182 | cpu_relax(); |
172 | } while (tmp_rtc != sirfsoc_rtc_iobrg_readl(rtcdrv->rtc_base + RTC_CN)); | 183 | } while (tmp_rtc != sirfsoc_rtc_readl(rtcdrv, RTC_CN)); |
173 | 184 | ||
174 | rtc_time_to_tm(rtcdrv->overflow_rtc << (BITS_PER_LONG - RTC_SHIFT) | | 185 | rtc_time_to_tm(rtcdrv->overflow_rtc << (BITS_PER_LONG - RTC_SHIFT) | |
175 | tmp_rtc >> RTC_SHIFT, tm); | 186 | tmp_rtc >> RTC_SHIFT, tm); |
@@ -187,10 +198,8 @@ static int sirfsoc_rtc_set_time(struct device *dev, | |||
187 | 198 | ||
188 | rtcdrv->overflow_rtc = rtc_time >> (BITS_PER_LONG - RTC_SHIFT); | 199 | rtcdrv->overflow_rtc = rtc_time >> (BITS_PER_LONG - RTC_SHIFT); |
189 | 200 | ||
190 | sirfsoc_rtc_iobrg_writel(rtcdrv->overflow_rtc, | 201 | sirfsoc_rtc_writel(rtcdrv, RTC_SW_VALUE, rtcdrv->overflow_rtc); |
191 | rtcdrv->rtc_base + RTC_SW_VALUE); | 202 | sirfsoc_rtc_writel(rtcdrv, RTC_CN, rtc_time << RTC_SHIFT); |
192 | sirfsoc_rtc_iobrg_writel( | ||
193 | rtc_time << RTC_SHIFT, rtcdrv->rtc_base + RTC_CN); | ||
194 | 203 | ||
195 | return 0; | 204 | return 0; |
196 | } | 205 | } |
@@ -222,14 +231,13 @@ static int sirfsoc_rtc_alarm_irq_enable(struct device *dev, | |||
222 | 231 | ||
223 | spin_lock_irq(&rtcdrv->lock); | 232 | spin_lock_irq(&rtcdrv->lock); |
224 | 233 | ||
225 | rtc_status_reg = sirfsoc_rtc_iobrg_readl( | 234 | rtc_status_reg = sirfsoc_rtc_readl(rtcdrv, RTC_STATUS); |
226 | rtcdrv->rtc_base + RTC_STATUS); | ||
227 | if (enabled) | 235 | if (enabled) |
228 | rtc_status_reg |= SIRFSOC_RTC_AL0E; | 236 | rtc_status_reg |= SIRFSOC_RTC_AL0E; |
229 | else | 237 | else |
230 | rtc_status_reg &= ~SIRFSOC_RTC_AL0E; | 238 | rtc_status_reg &= ~SIRFSOC_RTC_AL0E; |
231 | 239 | ||
232 | sirfsoc_rtc_iobrg_writel(rtc_status_reg, rtcdrv->rtc_base + RTC_STATUS); | 240 | sirfsoc_rtc_writel(rtcdrv, RTC_STATUS, rtc_status_reg); |
233 | 241 | ||
234 | spin_unlock_irq(&rtcdrv->lock); | 242 | spin_unlock_irq(&rtcdrv->lock); |
235 | 243 | ||
@@ -254,7 +262,7 @@ static irqreturn_t sirfsoc_rtc_irq_handler(int irq, void *pdata) | |||
254 | 262 | ||
255 | spin_lock(&rtcdrv->lock); | 263 | spin_lock(&rtcdrv->lock); |
256 | 264 | ||
257 | rtc_status_reg = sirfsoc_rtc_iobrg_readl(rtcdrv->rtc_base + RTC_STATUS); | 265 | rtc_status_reg = sirfsoc_rtc_readl(rtcdrv, RTC_STATUS); |
258 | /* this bit will be set ONLY if an alarm was active | 266 | /* this bit will be set ONLY if an alarm was active |
259 | * and it expired NOW | 267 | * and it expired NOW |
260 | * So this is being used as an ASSERT | 268 | * So this is being used as an ASSERT |
@@ -270,7 +278,8 @@ static irqreturn_t sirfsoc_rtc_irq_handler(int irq, void *pdata) | |||
270 | /* Clear the Alarm enable bit */ | 278 | /* Clear the Alarm enable bit */ |
271 | rtc_status_reg &= ~(SIRFSOC_RTC_AL0E); | 279 | rtc_status_reg &= ~(SIRFSOC_RTC_AL0E); |
272 | } | 280 | } |
273 | sirfsoc_rtc_iobrg_writel(rtc_status_reg, rtcdrv->rtc_base + RTC_STATUS); | 281 | |
282 | sirfsoc_rtc_writel(rtcdrv, RTC_STATUS, rtc_status_reg); | ||
274 | 283 | ||
275 | spin_unlock(&rtcdrv->lock); | 284 | spin_unlock(&rtcdrv->lock); |
276 | 285 | ||
@@ -287,6 +296,13 @@ static const struct of_device_id sirfsoc_rtc_of_match[] = { | |||
287 | { .compatible = "sirf,prima2-sysrtc"}, | 296 | { .compatible = "sirf,prima2-sysrtc"}, |
288 | {}, | 297 | {}, |
289 | }; | 298 | }; |
299 | |||
300 | const struct regmap_config sysrtc_regmap_config = { | ||
301 | .reg_bits = 32, | ||
302 | .val_bits = 32, | ||
303 | .fast_io = true, | ||
304 | }; | ||
305 | |||
290 | MODULE_DEVICE_TABLE(of, sirfsoc_rtc_of_match); | 306 | MODULE_DEVICE_TABLE(of, sirfsoc_rtc_of_match); |
291 | 307 | ||
292 | static int sirfsoc_rtc_probe(struct platform_device *pdev) | 308 | static int sirfsoc_rtc_probe(struct platform_device *pdev) |
@@ -314,27 +330,35 @@ static int sirfsoc_rtc_probe(struct platform_device *pdev) | |||
314 | /* Register rtc alarm as a wakeup source */ | 330 | /* Register rtc alarm as a wakeup source */ |
315 | device_init_wakeup(&pdev->dev, 1); | 331 | device_init_wakeup(&pdev->dev, 1); |
316 | 332 | ||
333 | rtcdrv->regmap = devm_regmap_init_iobg(&pdev->dev, | ||
334 | &sysrtc_regmap_config); | ||
335 | if (IS_ERR(rtcdrv->regmap)) { | ||
336 | err = PTR_ERR(rtcdrv->regmap); | ||
337 | dev_err(&pdev->dev, "Failed to allocate register map: %d\n", | ||
338 | err); | ||
339 | return err; | ||
340 | } | ||
341 | |||
317 | /* | 342 | /* |
318 | * Set SYS_RTC counter in RTC_HZ HZ Units | 343 | * Set SYS_RTC counter in RTC_HZ HZ Units |
319 | * We are using 32K RTC crystal (32768 / RTC_HZ / 2) -1 | 344 | * We are using 32K RTC crystal (32768 / RTC_HZ / 2) -1 |
320 | * If 16HZ, therefore RTC_DIV = 1023; | 345 | * If 16HZ, therefore RTC_DIV = 1023; |
321 | */ | 346 | */ |
322 | rtc_div = ((32768 / RTC_HZ) / 2) - 1; | 347 | rtc_div = ((32768 / RTC_HZ) / 2) - 1; |
323 | sirfsoc_rtc_iobrg_writel(rtc_div, rtcdrv->rtc_base + RTC_DIV); | 348 | sirfsoc_rtc_writel(rtcdrv, RTC_DIV, rtc_div); |
324 | 349 | ||
325 | /* 0x3 -> RTC_CLK */ | 350 | /* 0x3 -> RTC_CLK */ |
326 | sirfsoc_rtc_iobrg_writel(SIRFSOC_RTC_CLK, | 351 | sirfsoc_rtc_writel(rtcdrv, RTC_CLOCK_SWITCH, SIRFSOC_RTC_CLK); |
327 | rtcdrv->rtc_base + RTC_CLOCK_SWITCH); | ||
328 | 352 | ||
329 | /* reset SYS RTC ALARM0 */ | 353 | /* reset SYS RTC ALARM0 */ |
330 | sirfsoc_rtc_iobrg_writel(0x0, rtcdrv->rtc_base + RTC_ALARM0); | 354 | sirfsoc_rtc_writel(rtcdrv, RTC_ALARM0, 0x0); |
331 | 355 | ||
332 | /* reset SYS RTC ALARM1 */ | 356 | /* reset SYS RTC ALARM1 */ |
333 | sirfsoc_rtc_iobrg_writel(0x0, rtcdrv->rtc_base + RTC_ALARM1); | 357 | sirfsoc_rtc_writel(rtcdrv, RTC_ALARM1, 0x0); |
334 | 358 | ||
335 | /* Restore RTC Overflow From Register After Command Reboot */ | 359 | /* Restore RTC Overflow From Register After Command Reboot */ |
336 | rtcdrv->overflow_rtc = | 360 | rtcdrv->overflow_rtc = |
337 | sirfsoc_rtc_iobrg_readl(rtcdrv->rtc_base + RTC_SW_VALUE); | 361 | sirfsoc_rtc_readl(rtcdrv, RTC_SW_VALUE); |
338 | 362 | ||
339 | rtcdrv->rtc = devm_rtc_device_register(&pdev->dev, pdev->name, | 363 | rtcdrv->rtc = devm_rtc_device_register(&pdev->dev, pdev->name, |
340 | &sirfsoc_rtc_ops, THIS_MODULE); | 364 | &sirfsoc_rtc_ops, THIS_MODULE); |
@@ -372,10 +396,10 @@ static int sirfsoc_rtc_suspend(struct device *dev) | |||
372 | { | 396 | { |
373 | struct sirfsoc_rtc_drv *rtcdrv = dev_get_drvdata(dev); | 397 | struct sirfsoc_rtc_drv *rtcdrv = dev_get_drvdata(dev); |
374 | rtcdrv->overflow_rtc = | 398 | rtcdrv->overflow_rtc = |
375 | sirfsoc_rtc_iobrg_readl(rtcdrv->rtc_base + RTC_SW_VALUE); | 399 | sirfsoc_rtc_readl(rtcdrv, RTC_SW_VALUE); |
376 | 400 | ||
377 | rtcdrv->saved_counter = | 401 | rtcdrv->saved_counter = |
378 | sirfsoc_rtc_iobrg_readl(rtcdrv->rtc_base + RTC_CN); | 402 | sirfsoc_rtc_readl(rtcdrv, RTC_CN); |
379 | rtcdrv->saved_overflow_rtc = rtcdrv->overflow_rtc; | 403 | rtcdrv->saved_overflow_rtc = rtcdrv->overflow_rtc; |
380 | if (device_may_wakeup(dev) && !enable_irq_wake(rtcdrv->irq)) | 404 | if (device_may_wakeup(dev) && !enable_irq_wake(rtcdrv->irq)) |
381 | rtcdrv->irq_wake = 1; | 405 | rtcdrv->irq_wake = 1; |
@@ -392,12 +416,10 @@ static int sirfsoc_rtc_resume(struct device *dev) | |||
392 | * if resume from snapshot and the rtc power is lost, | 416 | * if resume from snapshot and the rtc power is lost, |
393 | * restroe the rtc settings | 417 | * restroe the rtc settings |
394 | */ | 418 | */ |
395 | if (SIRFSOC_RTC_CLK != sirfsoc_rtc_iobrg_readl( | 419 | if (SIRFSOC_RTC_CLK != sirfsoc_rtc_readl(rtcdrv, RTC_CLOCK_SWITCH)) { |
396 | rtcdrv->rtc_base + RTC_CLOCK_SWITCH)) { | ||
397 | u32 rtc_div; | 420 | u32 rtc_div; |
398 | /* 0x3 -> RTC_CLK */ | 421 | /* 0x3 -> RTC_CLK */ |
399 | sirfsoc_rtc_iobrg_writel(SIRFSOC_RTC_CLK, | 422 | sirfsoc_rtc_writel(rtcdrv, RTC_CLOCK_SWITCH, SIRFSOC_RTC_CLK); |
400 | rtcdrv->rtc_base + RTC_CLOCK_SWITCH); | ||
401 | /* | 423 | /* |
402 | * Set SYS_RTC counter in RTC_HZ HZ Units | 424 | * Set SYS_RTC counter in RTC_HZ HZ Units |
403 | * We are using 32K RTC crystal (32768 / RTC_HZ / 2) -1 | 425 | * We are using 32K RTC crystal (32768 / RTC_HZ / 2) -1 |
@@ -405,13 +427,13 @@ static int sirfsoc_rtc_resume(struct device *dev) | |||
405 | */ | 427 | */ |
406 | rtc_div = ((32768 / RTC_HZ) / 2) - 1; | 428 | rtc_div = ((32768 / RTC_HZ) / 2) - 1; |
407 | 429 | ||
408 | sirfsoc_rtc_iobrg_writel(rtc_div, rtcdrv->rtc_base + RTC_DIV); | 430 | sirfsoc_rtc_writel(rtcdrv, RTC_DIV, rtc_div); |
409 | 431 | ||
410 | /* reset SYS RTC ALARM0 */ | 432 | /* reset SYS RTC ALARM0 */ |
411 | sirfsoc_rtc_iobrg_writel(0x0, rtcdrv->rtc_base + RTC_ALARM0); | 433 | sirfsoc_rtc_writel(rtcdrv, RTC_ALARM0, 0x0); |
412 | 434 | ||
413 | /* reset SYS RTC ALARM1 */ | 435 | /* reset SYS RTC ALARM1 */ |
414 | sirfsoc_rtc_iobrg_writel(0x0, rtcdrv->rtc_base + RTC_ALARM1); | 436 | sirfsoc_rtc_writel(rtcdrv, RTC_ALARM1, 0x0); |
415 | } | 437 | } |
416 | rtcdrv->overflow_rtc = rtcdrv->saved_overflow_rtc; | 438 | rtcdrv->overflow_rtc = rtcdrv->saved_overflow_rtc; |
417 | 439 | ||
@@ -419,15 +441,14 @@ static int sirfsoc_rtc_resume(struct device *dev) | |||
419 | * if current counter is small than previous, | 441 | * if current counter is small than previous, |
420 | * it means overflow in sleep | 442 | * it means overflow in sleep |
421 | */ | 443 | */ |
422 | tmp = sirfsoc_rtc_iobrg_readl(rtcdrv->rtc_base + RTC_CN); | 444 | tmp = sirfsoc_rtc_readl(rtcdrv, RTC_CN); |
423 | if (tmp <= rtcdrv->saved_counter) | 445 | if (tmp <= rtcdrv->saved_counter) |
424 | rtcdrv->overflow_rtc++; | 446 | rtcdrv->overflow_rtc++; |
425 | /* | 447 | /* |
426 | *PWRC Value Be Changed When Suspend, Restore Overflow | 448 | *PWRC Value Be Changed When Suspend, Restore Overflow |
427 | * In Memory To Register | 449 | * In Memory To Register |
428 | */ | 450 | */ |
429 | sirfsoc_rtc_iobrg_writel(rtcdrv->overflow_rtc, | 451 | sirfsoc_rtc_writel(rtcdrv, RTC_SW_VALUE, rtcdrv->overflow_rtc); |
430 | rtcdrv->rtc_base + RTC_SW_VALUE); | ||
431 | 452 | ||
432 | if (device_may_wakeup(dev) && rtcdrv->irq_wake) { | 453 | if (device_may_wakeup(dev) && rtcdrv->irq_wake) { |
433 | disable_irq_wake(rtcdrv->irq); | 454 | disable_irq_wake(rtcdrv->irq); |