aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/rtc/rtc-stmp3xxx.c
diff options
context:
space:
mode:
authorWolfram Sang <w.sang@pengutronix.de>2011-05-25 06:56:49 -0400
committerJohn Stultz <john.stultz@linaro.org>2011-07-01 21:09:34 -0400
commit47eac337cd87464b90d0ad2eb2a060036a95b649 (patch)
tree84db345a5b36c28d62cab980e1a1fb81c43c30a9 /drivers/rtc/rtc-stmp3xxx.c
parent07187ee13f2b4ba183d4a4832ea153dbb2e030d3 (diff)
rtc: stmp3xxx: Restore register definitions
The stmp3xxx driver used to include register names from a stmp-specific include. Because of consolidation, plat-stmp has now been removed and merged with the compatible mach-mxs. Restore the register names directly in the driver and rename them to be specific to this driver. Signed-off-by: Wolfram Sang <w.sang@pengutronix.de> Tested-by: Shawn Guo <shawn.guo@freescale.com> Signed-off-by: John Stultz <john.stultz@linaro.org>
Diffstat (limited to 'drivers/rtc/rtc-stmp3xxx.c')
-rw-r--r--drivers/rtc/rtc-stmp3xxx.c97
1 files changed, 60 insertions, 37 deletions
diff --git a/drivers/rtc/rtc-stmp3xxx.c b/drivers/rtc/rtc-stmp3xxx.c
index 572e9534b591..e54bea076067 100644
--- a/drivers/rtc/rtc-stmp3xxx.c
+++ b/drivers/rtc/rtc-stmp3xxx.c
@@ -26,7 +26,25 @@
26 26
27#include <mach/platform.h> 27#include <mach/platform.h>
28#include <mach/stmp3xxx.h> 28#include <mach/stmp3xxx.h>
29#include <mach/regs-rtc.h> 29
30#define STMP3XXX_RTC_CTRL 0x0
31#define STMP3XXX_RTC_CTRL_ALARM_IRQ_EN 0x00000001
32#define STMP3XXX_RTC_CTRL_ONEMSEC_IRQ_EN 0x00000002
33#define STMP3XXX_RTC_CTRL_ALARM_IRQ 0x00000004
34#define STMP3XXX_RTC_CTRL_ONEMSEC_IRQ 0x00000008
35
36#define STMP3XXX_RTC_STAT 0x10
37#define STMP3XXX_RTC_STAT_STALE_SHIFT 16
38#define STMP3XXX_RTC_STAT_RTC_PRESENT 0x80000000
39
40#define STMP3XXX_RTC_SECONDS 0x30
41
42#define STMP3XXX_RTC_ALARM 0x40
43
44#define STMP3XXX_RTC_PERSISTENT0 0x60
45#define STMP3XXX_RTC_PERSISTENT0_ALARM_WAKE_EN 0x00000002
46#define STMP3XXX_RTC_PERSISTENT0_ALARM_EN 0x00000004
47#define STMP3XXX_RTC_PERSISTENT0_ALARM_WAKE 0x00000080
30 48
31struct stmp3xxx_rtc_data { 49struct stmp3xxx_rtc_data {
32 struct rtc_device *rtc; 50 struct rtc_device *rtc;
@@ -42,8 +60,8 @@ static void stmp3xxx_wait_time(struct stmp3xxx_rtc_data *rtc_data)
42 * NEW_REGS/STALE_REGS bitfields go. In fact it's 0x1=P0, 60 * NEW_REGS/STALE_REGS bitfields go. In fact it's 0x1=P0,
43 * 0x2=P1, .., 0x20=P5, 0x40=ALARM, 0x80=SECONDS 61 * 0x2=P1, .., 0x20=P5, 0x40=ALARM, 0x80=SECONDS
44 */ 62 */
45 while (__raw_readl(rtc_data->io + HW_RTC_STAT) & 63 while (__raw_readl(rtc_data->io + STMP3XXX_RTC_STAT) &
46 BF(0x80, RTC_STAT_STALE_REGS)) 64 (0x80 << STMP3XXX_RTC_STAT_STALE_SHIFT))
47 cpu_relax(); 65 cpu_relax();
48} 66}
49 67
@@ -53,7 +71,8 @@ static int stmp3xxx_rtc_gettime(struct device *dev, struct rtc_time *rtc_tm)
53 struct stmp3xxx_rtc_data *rtc_data = dev_get_drvdata(dev); 71 struct stmp3xxx_rtc_data *rtc_data = dev_get_drvdata(dev);
54 72
55 stmp3xxx_wait_time(rtc_data); 73 stmp3xxx_wait_time(rtc_data);
56 rtc_time_to_tm(__raw_readl(rtc_data->io + HW_RTC_SECONDS), rtc_tm); 74 rtc_time_to_tm(__raw_readl(rtc_data->io + STMP3XXX_RTC_SECONDS),
75 rtc_tm);
57 return 0; 76 return 0;
58} 77}
59 78
@@ -61,7 +80,7 @@ static int stmp3xxx_rtc_set_mmss(struct device *dev, unsigned long t)
61{ 80{
62 struct stmp3xxx_rtc_data *rtc_data = dev_get_drvdata(dev); 81 struct stmp3xxx_rtc_data *rtc_data = dev_get_drvdata(dev);
63 82
64 __raw_writel(t, rtc_data->io + HW_RTC_SECONDS); 83 __raw_writel(t, rtc_data->io + STMP3XXX_RTC_SECONDS);
65 stmp3xxx_wait_time(rtc_data); 84 stmp3xxx_wait_time(rtc_data);
66 return 0; 85 return 0;
67} 86}
@@ -73,18 +92,19 @@ static irqreturn_t stmp3xxx_rtc_interrupt(int irq, void *dev_id)
73 u32 status; 92 u32 status;
74 u32 events = 0; 93 u32 events = 0;
75 94
76 status = __raw_readl(rtc_data->io + HW_RTC_CTRL) & 95 status = __raw_readl(rtc_data->io + STMP3XXX_RTC_CTRL) &
77 (BM_RTC_CTRL_ALARM_IRQ | BM_RTC_CTRL_ONEMSEC_IRQ); 96 (STMP3XXX_RTC_CTRL_ALARM_IRQ |
97 STMP3XXX_RTC_CTRL_ONEMSEC_IRQ);
78 98
79 if (status & BM_RTC_CTRL_ALARM_IRQ) { 99 if (status & STMP3XXX_RTC_CTRL_ALARM_IRQ) {
80 stmp3xxx_clearl(BM_RTC_CTRL_ALARM_IRQ, 100 stmp3xxx_clearl(STMP3XXX_RTC_CTRL_ALARM_IRQ,
81 rtc_data->io + HW_RTC_CTRL); 101 rtc_data->io + STMP3XXX_RTC_CTRL);
82 events |= RTC_AF | RTC_IRQF; 102 events |= RTC_AF | RTC_IRQF;
83 } 103 }
84 104
85 if (status & BM_RTC_CTRL_ONEMSEC_IRQ) { 105 if (status & STMP3XXX_RTC_CTRL_ONEMSEC_IRQ) {
86 stmp3xxx_clearl(BM_RTC_CTRL_ONEMSEC_IRQ, 106 stmp3xxx_clearl(STMP3XXX_RTC_CTRL_ONEMSEC_IRQ,
87 rtc_data->io + HW_RTC_CTRL); 107 rtc_data->io + STMP3XXX_RTC_CTRL);
88 if (++rtc_data->irq_count % 1000 == 0) { 108 if (++rtc_data->irq_count % 1000 == 0) {
89 events |= RTC_UF | RTC_IRQF; 109 events |= RTC_UF | RTC_IRQF;
90 rtc_data->irq_count = 0; 110 rtc_data->irq_count = 0;
@@ -100,17 +120,17 @@ static irqreturn_t stmp3xxx_rtc_interrupt(int irq, void *dev_id)
100static int stmp3xxx_alarm_irq_enable(struct device *dev, unsigned int enabled) 120static int stmp3xxx_alarm_irq_enable(struct device *dev, unsigned int enabled)
101{ 121{
102 struct stmp3xxx_rtc_data *rtc_data = dev_get_drvdata(dev); 122 struct stmp3xxx_rtc_data *rtc_data = dev_get_drvdata(dev);
103 void __iomem *p = rtc_data->io + HW_RTC_PERSISTENT0, 123 void __iomem *p = rtc_data->io + STMP3XXX_RTC_PERSISTENT0,
104 *ctl = rtc_data->io + HW_RTC_CTRL; 124 *ctl = rtc_data->io + STMP3XXX_RTC_CTRL;
105 125
106 if (enabled) { 126 if (enabled) {
107 stmp3xxx_setl(BM_RTC_PERSISTENT0_ALARM_EN | 127 stmp3xxx_setl(STMP3XXX_RTC_PERSISTENT0_ALARM_EN |
108 BM_RTC_PERSISTENT0_ALARM_WAKE_EN, p); 128 STMP3XXX_RTC_PERSISTENT0_ALARM_WAKE_EN, p);
109 stmp3xxx_setl(BM_RTC_CTRL_ALARM_IRQ_EN, ctl); 129 stmp3xxx_setl(STMP3XXX_RTC_CTRL_ALARM_IRQ_EN, ctl);
110 } else { 130 } else {
111 stmp3xxx_clearl(BM_RTC_PERSISTENT0_ALARM_EN | 131 stmp3xxx_clearl(STMP3XXX_RTC_PERSISTENT0_ALARM_EN |
112 BM_RTC_PERSISTENT0_ALARM_WAKE_EN, p); 132 STMP3XXX_RTC_PERSISTENT0_ALARM_WAKE_EN, p);
113 stmp3xxx_clearl(BM_RTC_CTRL_ALARM_IRQ_EN, ctl); 133 stmp3xxx_clearl(STMP3XXX_RTC_CTRL_ALARM_IRQ_EN, ctl);
114 } 134 }
115 return 0; 135 return 0;
116} 136}
@@ -119,7 +139,8 @@ static int stmp3xxx_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alm)
119{ 139{
120 struct stmp3xxx_rtc_data *rtc_data = dev_get_drvdata(dev); 140 struct stmp3xxx_rtc_data *rtc_data = dev_get_drvdata(dev);
121 141
122 rtc_time_to_tm(__raw_readl(rtc_data->io + HW_RTC_ALARM), &alm->time); 142 rtc_time_to_tm(__raw_readl(rtc_data->io + STMP3XXX_RTC_ALARM),
143 &alm->time);
123 return 0; 144 return 0;
124} 145}
125 146
@@ -129,7 +150,7 @@ static int stmp3xxx_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alm)
129 struct stmp3xxx_rtc_data *rtc_data = dev_get_drvdata(dev); 150 struct stmp3xxx_rtc_data *rtc_data = dev_get_drvdata(dev);
130 151
131 rtc_tm_to_time(&alm->time, &t); 152 rtc_tm_to_time(&alm->time, &t);
132 __raw_writel(t, rtc_data->io + HW_RTC_ALARM); 153 __raw_writel(t, rtc_data->io + STMP3XXX_RTC_ALARM);
133 return 0; 154 return 0;
134} 155}
135 156
@@ -149,8 +170,9 @@ static int stmp3xxx_rtc_remove(struct platform_device *pdev)
149 if (!rtc_data) 170 if (!rtc_data)
150 return 0; 171 return 0;
151 172
152 stmp3xxx_clearl(BM_RTC_CTRL_ONEMSEC_IRQ_EN | BM_RTC_CTRL_ALARM_IRQ_EN, 173 stmp3xxx_clearl(STMP3XXX_RTC_CTRL_ONEMSEC_IRQ_EN |
153 rtc_data->io + HW_RTC_CTRL); 174 STMP3XXX_RTC_CTRL_ALARM_IRQ_EN,
175 rtc_data->io + STMP3XXX_RTC_CTRL);
154 free_irq(rtc_data->irq_alarm, &pdev->dev); 176 free_irq(rtc_data->irq_alarm, &pdev->dev);
155 free_irq(rtc_data->irq_1msec, &pdev->dev); 177 free_irq(rtc_data->irq_1msec, &pdev->dev);
156 rtc_device_unregister(rtc_data->rtc); 178 rtc_device_unregister(rtc_data->rtc);
@@ -187,18 +209,18 @@ static int stmp3xxx_rtc_probe(struct platform_device *pdev)
187 rtc_data->irq_alarm = platform_get_irq(pdev, 0); 209 rtc_data->irq_alarm = platform_get_irq(pdev, 0);
188 rtc_data->irq_1msec = platform_get_irq(pdev, 1); 210 rtc_data->irq_1msec = platform_get_irq(pdev, 1);
189 211
190 if (!(__raw_readl(HW_RTC_STAT + rtc_data->io) & 212 if (!(__raw_readl(STMP3XXX_RTC_STAT + rtc_data->io) &
191 BM_RTC_STAT_RTC_PRESENT)) { 213 STMP3XXX_RTC_STAT_RTC_PRESENT)) {
192 dev_err(&pdev->dev, "no device onboard\n"); 214 dev_err(&pdev->dev, "no device onboard\n");
193 err = -ENODEV; 215 err = -ENODEV;
194 goto out_remap; 216 goto out_remap;
195 } 217 }
196 218
197 stmp3xxx_reset_block(rtc_data->io, true); 219 stmp3xxx_reset_block(rtc_data->io, true);
198 stmp3xxx_clearl(BM_RTC_PERSISTENT0_ALARM_EN | 220 stmp3xxx_clearl(STMP3XXX_RTC_PERSISTENT0_ALARM_EN |
199 BM_RTC_PERSISTENT0_ALARM_WAKE_EN | 221 STMP3XXX_RTC_PERSISTENT0_ALARM_WAKE_EN |
200 BM_RTC_PERSISTENT0_ALARM_WAKE, 222 STMP3XXX_RTC_PERSISTENT0_ALARM_WAKE,
201 rtc_data->io + HW_RTC_PERSISTENT0); 223 rtc_data->io + STMP3XXX_RTC_PERSISTENT0);
202 rtc_data->rtc = rtc_device_register(pdev->name, &pdev->dev, 224 rtc_data->rtc = rtc_device_register(pdev->name, &pdev->dev,
203 &stmp3xxx_rtc_ops, THIS_MODULE); 225 &stmp3xxx_rtc_ops, THIS_MODULE);
204 if (IS_ERR(rtc_data->rtc)) { 226 if (IS_ERR(rtc_data->rtc)) {
@@ -229,8 +251,9 @@ static int stmp3xxx_rtc_probe(struct platform_device *pdev)
229out_irq1: 251out_irq1:
230 free_irq(rtc_data->irq_alarm, &pdev->dev); 252 free_irq(rtc_data->irq_alarm, &pdev->dev);
231out_irq_alarm: 253out_irq_alarm:
232 stmp3xxx_clearl(BM_RTC_CTRL_ONEMSEC_IRQ_EN | BM_RTC_CTRL_ALARM_IRQ_EN, 254 stmp3xxx_clearl(STMP3XXX_RTC_CTRL_ONEMSEC_IRQ_EN |
233 rtc_data->io + HW_RTC_CTRL); 255 STMP3XXX_RTC_CTRL_ALARM_IRQ_EN,
256 rtc_data->io + STMP3XXX_RTC_CTRL);
234 rtc_device_unregister(rtc_data->rtc); 257 rtc_device_unregister(rtc_data->rtc);
235out_remap: 258out_remap:
236 iounmap(rtc_data->io); 259 iounmap(rtc_data->io);
@@ -250,10 +273,10 @@ static int stmp3xxx_rtc_resume(struct platform_device *dev)
250 struct stmp3xxx_rtc_data *rtc_data = platform_get_drvdata(dev); 273 struct stmp3xxx_rtc_data *rtc_data = platform_get_drvdata(dev);
251 274
252 stmp3xxx_reset_block(rtc_data->io, true); 275 stmp3xxx_reset_block(rtc_data->io, true);
253 stmp3xxx_clearl(BM_RTC_PERSISTENT0_ALARM_EN | 276 stmp3xxx_clearl(STMP3XXX_RTC_PERSISTENT0_ALARM_EN |
254 BM_RTC_PERSISTENT0_ALARM_WAKE_EN | 277 STMP3XXX_RTC_PERSISTENT0_ALARM_WAKE_EN |
255 BM_RTC_PERSISTENT0_ALARM_WAKE, 278 STMP3XXX_RTC_PERSISTENT0_ALARM_WAKE,
256 rtc_data->io + HW_RTC_PERSISTENT0); 279 rtc_data->io + STMP3XXX_RTC_PERSISTENT0);
257 return 0; 280 return 0;
258} 281}
259#else 282#else