• Home
  • Raw
  • Download

Lines Matching full:rtc

19 #include <linux/rtc.h>
50 #define RTC_NAME "rtc-lpc32xx"
61 struct rtc_device *rtc; member
68 struct lpc32xx_rtc *rtc = dev_get_drvdata(dev); in lpc32xx_rtc_read_time() local
70 elapsed_sec = rtc_readl(rtc, LPC32XX_RTC_UCOUNT); in lpc32xx_rtc_read_time()
78 struct lpc32xx_rtc *rtc = dev_get_drvdata(dev); in lpc32xx_rtc_set_mmss() local
81 spin_lock_irq(&rtc->lock); in lpc32xx_rtc_set_mmss()
83 /* RTC must be disabled during count update */ in lpc32xx_rtc_set_mmss()
84 tmp = rtc_readl(rtc, LPC32XX_RTC_CTRL); in lpc32xx_rtc_set_mmss()
85 rtc_writel(rtc, LPC32XX_RTC_CTRL, tmp | LPC32XX_RTC_CTRL_CNTR_DIS); in lpc32xx_rtc_set_mmss()
86 rtc_writel(rtc, LPC32XX_RTC_UCOUNT, secs); in lpc32xx_rtc_set_mmss()
87 rtc_writel(rtc, LPC32XX_RTC_DCOUNT, 0xFFFFFFFF - secs); in lpc32xx_rtc_set_mmss()
88 rtc_writel(rtc, LPC32XX_RTC_CTRL, tmp &= ~LPC32XX_RTC_CTRL_CNTR_DIS); in lpc32xx_rtc_set_mmss()
90 spin_unlock_irq(&rtc->lock); in lpc32xx_rtc_set_mmss()
98 struct lpc32xx_rtc *rtc = dev_get_drvdata(dev); in lpc32xx_rtc_read_alarm() local
100 rtc_time_to_tm(rtc_readl(rtc, LPC32XX_RTC_MATCH0), &wkalrm->time); in lpc32xx_rtc_read_alarm()
101 wkalrm->enabled = rtc->alarm_enabled; in lpc32xx_rtc_read_alarm()
102 wkalrm->pending = !!(rtc_readl(rtc, LPC32XX_RTC_INTSTAT) & in lpc32xx_rtc_read_alarm()
111 struct lpc32xx_rtc *rtc = dev_get_drvdata(dev); in lpc32xx_rtc_set_alarm() local
122 spin_lock_irq(&rtc->lock); in lpc32xx_rtc_set_alarm()
125 tmp = rtc_readl(rtc, LPC32XX_RTC_CTRL); in lpc32xx_rtc_set_alarm()
126 rtc_writel(rtc, LPC32XX_RTC_CTRL, tmp & ~LPC32XX_RTC_CTRL_MATCH0); in lpc32xx_rtc_set_alarm()
128 rtc_writel(rtc, LPC32XX_RTC_MATCH0, alarmsecs); in lpc32xx_rtc_set_alarm()
130 rtc->alarm_enabled = wkalrm->enabled; in lpc32xx_rtc_set_alarm()
132 rtc_writel(rtc, LPC32XX_RTC_INTSTAT, in lpc32xx_rtc_set_alarm()
134 rtc_writel(rtc, LPC32XX_RTC_CTRL, tmp | in lpc32xx_rtc_set_alarm()
138 spin_unlock_irq(&rtc->lock); in lpc32xx_rtc_set_alarm()
146 struct lpc32xx_rtc *rtc = dev_get_drvdata(dev); in lpc32xx_rtc_alarm_irq_enable() local
149 spin_lock_irq(&rtc->lock); in lpc32xx_rtc_alarm_irq_enable()
150 tmp = rtc_readl(rtc, LPC32XX_RTC_CTRL); in lpc32xx_rtc_alarm_irq_enable()
153 rtc->alarm_enabled = 1; in lpc32xx_rtc_alarm_irq_enable()
156 rtc->alarm_enabled = 0; in lpc32xx_rtc_alarm_irq_enable()
160 rtc_writel(rtc, LPC32XX_RTC_CTRL, tmp); in lpc32xx_rtc_alarm_irq_enable()
161 spin_unlock_irq(&rtc->lock); in lpc32xx_rtc_alarm_irq_enable()
168 struct lpc32xx_rtc *rtc = dev; in lpc32xx_rtc_alarm_interrupt() local
170 spin_lock(&rtc->lock); in lpc32xx_rtc_alarm_interrupt()
173 rtc_writel(rtc, LPC32XX_RTC_CTRL, in lpc32xx_rtc_alarm_interrupt()
174 rtc_readl(rtc, LPC32XX_RTC_CTRL) & in lpc32xx_rtc_alarm_interrupt()
176 rtc->alarm_enabled = 0; in lpc32xx_rtc_alarm_interrupt()
179 * Write a large value to the match value so the RTC won't in lpc32xx_rtc_alarm_interrupt()
182 rtc_writel(rtc, LPC32XX_RTC_MATCH0, 0xFFFFFFFF); in lpc32xx_rtc_alarm_interrupt()
183 rtc_writel(rtc, LPC32XX_RTC_INTSTAT, LPC32XX_RTC_INTSTAT_MATCH0); in lpc32xx_rtc_alarm_interrupt()
185 spin_unlock(&rtc->lock); in lpc32xx_rtc_alarm_interrupt()
187 rtc_update_irq(rtc->rtc, 1, RTC_IRQF | RTC_AF); in lpc32xx_rtc_alarm_interrupt()
203 struct lpc32xx_rtc *rtc; in lpc32xx_rtc_probe() local
213 rtc = devm_kzalloc(&pdev->dev, sizeof(*rtc), GFP_KERNEL); in lpc32xx_rtc_probe()
214 if (unlikely(!rtc)) in lpc32xx_rtc_probe()
217 rtc->irq = rtcirq; in lpc32xx_rtc_probe()
220 rtc->rtc_base = devm_ioremap_resource(&pdev->dev, res); in lpc32xx_rtc_probe()
221 if (IS_ERR(rtc->rtc_base)) in lpc32xx_rtc_probe()
222 return PTR_ERR(rtc->rtc_base); in lpc32xx_rtc_probe()
224 spin_lock_init(&rtc->lock); in lpc32xx_rtc_probe()
227 * The RTC is on a separate power domain and can keep it's state in lpc32xx_rtc_probe()
228 * across a chip power cycle. If the RTC has never been previously in lpc32xx_rtc_probe()
231 tmp = rtc_readl(rtc, LPC32XX_RTC_CTRL); in lpc32xx_rtc_probe()
232 if (rtc_readl(rtc, LPC32XX_RTC_KEY) != LPC32XX_RTC_KEY_ONSW_LOADVAL) { in lpc32xx_rtc_probe()
240 rtc_writel(rtc, LPC32XX_RTC_CTRL, tmp); in lpc32xx_rtc_probe()
243 rtc_writel(rtc, LPC32XX_RTC_MATCH0, 0xFFFFFFFF); in lpc32xx_rtc_probe()
244 rtc_writel(rtc, LPC32XX_RTC_INTSTAT, in lpc32xx_rtc_probe()
249 /* Write key value to RTC so it won't reload on reset */ in lpc32xx_rtc_probe()
250 rtc_writel(rtc, LPC32XX_RTC_KEY, in lpc32xx_rtc_probe()
253 rtc_writel(rtc, LPC32XX_RTC_CTRL, in lpc32xx_rtc_probe()
257 platform_set_drvdata(pdev, rtc); in lpc32xx_rtc_probe()
259 rtc->rtc = devm_rtc_device_register(&pdev->dev, RTC_NAME, in lpc32xx_rtc_probe()
261 if (IS_ERR(rtc->rtc)) { in lpc32xx_rtc_probe()
262 dev_err(&pdev->dev, "Can't get RTC\n"); in lpc32xx_rtc_probe()
263 return PTR_ERR(rtc->rtc); in lpc32xx_rtc_probe()
270 if (rtc->irq >= 0) { in lpc32xx_rtc_probe()
271 if (devm_request_irq(&pdev->dev, rtc->irq, in lpc32xx_rtc_probe()
273 0, pdev->name, rtc) < 0) { in lpc32xx_rtc_probe()
275 rtc->irq = -1; in lpc32xx_rtc_probe()
286 struct lpc32xx_rtc *rtc = platform_get_drvdata(pdev); in lpc32xx_rtc_remove() local
288 if (rtc->irq >= 0) in lpc32xx_rtc_remove()
297 struct lpc32xx_rtc *rtc = dev_get_drvdata(dev); in lpc32xx_rtc_suspend() local
299 if (rtc->irq >= 0) { in lpc32xx_rtc_suspend()
301 enable_irq_wake(rtc->irq); in lpc32xx_rtc_suspend()
303 disable_irq_wake(rtc->irq); in lpc32xx_rtc_suspend()
311 struct lpc32xx_rtc *rtc = dev_get_drvdata(dev); in lpc32xx_rtc_resume() local
313 if (rtc->irq >= 0 && device_may_wakeup(dev)) in lpc32xx_rtc_resume()
314 disable_irq_wake(rtc->irq); in lpc32xx_rtc_resume()
322 struct lpc32xx_rtc *rtc = dev_get_drvdata(dev); in lpc32xx_rtc_freeze() local
324 spin_lock_irq(&rtc->lock); in lpc32xx_rtc_freeze()
326 rtc_writel(rtc, LPC32XX_RTC_CTRL, in lpc32xx_rtc_freeze()
327 rtc_readl(rtc, LPC32XX_RTC_CTRL) & in lpc32xx_rtc_freeze()
330 spin_unlock_irq(&rtc->lock); in lpc32xx_rtc_freeze()
337 struct lpc32xx_rtc *rtc = dev_get_drvdata(dev); in lpc32xx_rtc_thaw() local
339 if (rtc->alarm_enabled) { in lpc32xx_rtc_thaw()
340 spin_lock_irq(&rtc->lock); in lpc32xx_rtc_thaw()
342 rtc_writel(rtc, LPC32XX_RTC_CTRL, in lpc32xx_rtc_thaw()
343 rtc_readl(rtc, LPC32XX_RTC_CTRL) | in lpc32xx_rtc_thaw()
346 spin_unlock_irq(&rtc->lock); in lpc32xx_rtc_thaw()
367 { .compatible = "nxp,lpc3220-rtc" },
386 MODULE_DESCRIPTION("RTC driver for the LPC32xx SoC");
388 MODULE_ALIAS("platform:rtc-lpc32xx");